Android平台手机UI应用开发——软件管理器

来源:互联网 发布:淘宝内部优惠券jp519 编辑:程序博客网 时间:2024/06/10 09:00

第一次写博客,与大家分享源代码,博客很多地方不知道怎么设计,望见谅。

希望大家多多支持,雅林和大家一起学习Android,共同进步。

今天我们要做的这个软件管理器,主要目的是为了学习Android平台手机UI设计。

 

源代码下载地址:Android平台手机UI应用开发——软件管理器

 

功能:

在应用上分为:系统应用用户应用

在界面上实现应用列表的两种视图:列表视图网格视图

在功能上实现应用的启动详细信息卸载功能。

以及底部菜单的美化

 

截图:

 

 

 

 

 

 

项目目录:

 

XML代码展示:

 layout目录文件

about.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:background="@drawable/bg"  android:orientation="vertical">  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:textSize="20px"  android:textStyle="bold"  android:textColor="#FFFFFF"  android:text="关于SoftManager说明"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="感谢您使用SoftManager,SoftManager是一个可以管理手机应用的一款绿色软件,使用户可以对自己手机软件有一个直观的了解。本应用提供两种视图方式(网格视图和列表视图),用户可以根据自己的需求随意调换。"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="功能列表:"  android:textSize="20px"  android:textStyle="bold"  android:textColor="#FFFFFF"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="①SoftManager可以执行手机应用程序"  android:textSize="16px"  android:textStyle="bold"  android:textColor="#FFFFFF"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="②SoftManager可以对查看应用相关信息(包括如下信息)"  android:textSize="16px"  android:textStyle="bold"  android:textColor="#FFFFFF"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="程序名称"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="程序包名"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="程序版本"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="程序版本号"/>  <TextView  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="③SoftManager可以卸载手机应用"  android:textSize="16px"  android:textStyle="bold"  android:textColor="#FFFFFF"/>  </LinearLayout>

 

gridview_menu.xml

<?xml version="1.0" encoding="utf-8"?><GridView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/gvmenu" android:layout_width="fill_parent" android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:stretchMode="columnWidth" android:numColumns="4"android:listSelector="@drawable/menu_selectitem"android:horizontalSpacing="12.0dip" android:verticalSpacing="8.0dip"></GridView>


gridviewitem.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="90px"  android:layout_height="wrap_content"  android:orientation="vertical"  android:gravity="center_horizontal">  <ImageView  android:id="@+id/gv_item_icon"  android:paddingTop="3px"  android:layout_width="55px"  android:layout_height="55px"/>  <TextView  android:id="@+id/gv_item_appname"  android:layout_width="60px"  android:layout_height="wrap_content"  android:textSize="13px"  android:maxLines="1"  android:gravity="center"  android:textColor="#FFFFFF"  android:paddingBottom="3px"/></LinearLayout>


huanyingmian.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:background="@drawable/huanying"></LinearLayout>


listviewitem.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:orientation="horizontal"  android:gravity="center_vertical">  <ImageView      android:id="@+id/lv_icon"      android:layout_marginTop="5px"      android:layout_marginBottom="5px"      android:layout_width="48px"      android:layout_height="48px"/>  <LinearLayout       android:orientation="vertical"      android:layout_marginLeft="5px"      android:layout_width="wrap_content"      android:layout_height="48px">      <TextView           android:id="@+id/lv_item_appname"          android:maxLines="1"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:textSize="16px"          android:textColor="#ffffff"/>      <TextView           android:id="@+id/lv_item_packagename"          android:maxLines="1"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:textColor="#ffffff"/>  </LinearLayout></LinearLayout>


main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:background="@drawable/bg"  android:id="@+id/mianxmllay"  android:orientation="vertical">  <RelativeLayout  android:layout_width="fill_parent"  android:layout_height="30px"  android:background="@drawable/top_bg">  <ImageView android:id="@+id/top_icon"  android:layout_width="135px"  android:layout_height="30px"  android:src="@drawable/top_icon"/>  </RelativeLayout>  <LinearLayout  android:layout_height="wrap_content"  android:layout_width="fill_parent"  android:orientation="vertical">  <LinearLayout  android:layout_width="fill_parent"  android:layout_height="30px"  android:id="@+id/top_gg_lay"  android:background="@drawable/to_gg_bg">  <TextView  android:id="@+id/top_gg_text"  android:layout_width="wrap_content"  android:layout_height="30px"  android:textColor="#FF0000"  android:textSize="16px"  android:gravity="center_vertical"  android:text="官方公告:"/>  <TextView  android:id="@+id/top_text"  android:layout_width="wrap_content"  android:layout_height="30px"  android:gravity="center_vertical"  android:layout_toRightOf="@id/top_gg_text"  android:singleLine="true"  android:scrollHorizontally="true"  android:focusable="true"  android:ellipsize="marquee"  android:marqueeRepeatLimit="marquee_forever"  android:textColor="#000000"  android:text="欢迎使用软件管理器,我们一直为能更好的管理您的软件而努力。"/>  </LinearLayout>  <RelativeLayout  android:layout_width="fill_parent"  android:layout_height="40px"  android:background="#FFFFFF"  android:layout_alignParentBottom="true"  android:gravity="center_vertical|center_horizontal"  android:id="@+id/qiehuan_relative">  <ImageButton  android:id="@+id/ib_ch_view"  android:layout_alignParentLeft="true"  android:layout_marginLeft="5px"  android:background="@drawable/top_left_list"  android:layout_width="wrap_content"  android:layout_height="wrap_content"/>  <ImageButton  android:id="@+id/btn_jiantou"  android:layout_height="30px"  android:layout_width="50px"  android:background="@drawable/jiantou"  android:layout_centerHorizontal="true"  />  <ImageButton  android:id="@+id/ib_ch_categroy"  android:layout_alignParentRight="true"  android:layout_marginRight="5px"  android:background="@drawable/top_right_user"  android:layout_width="wrap_content"  android:layout_height="wrap_content"/></RelativeLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"><GridView  android:id="@+id/gridView"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:numColumns="3"  android:horizontalSpacing="10px"  android:verticalSpacing="10px"  android:listSelector="@drawable/choose_gridview"  android:layout_marginRight="5px"  android:layout_marginTop="5px"  android:layout_marginLeft="5px"/>  <ListView  android:id="@+id/lv_apps"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:listSelector="@drawable/choose_listview"  android:layout_marginLeft="5px"  android:layout_marginRight="5px"  android:layout_marginTop="5px"  android:visibility="gone"/></LinearLayout>  </LinearLayout></LinearLayout>

 

menu_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/RelativeLayout_Item"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:paddingTop="6.0dip"  android:saveEnabled="false"  android:orientation="vertical"  android:gravity="center_horizontal">  <ImageView  android:id="@+id/item_image"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  />  <TextView   android:id="@+id/item_text"   android:layout_width="wrap_content"android:layout_height="wrap_content" android:layout_marginTop="7.0dip"android:textColor="#42556B"   /></LinearLayout>


topmenu.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="40px"  android:background="#FFFFFF"  android:gravity="center_vertical">  <ImageButton  android:id="@+id/ib_ch_view"  android:layout_alignParentLeft="true"  android:layout_marginLeft="5px"  android:background="@drawable/top_left_list"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  />  <ImageButton  android:id="@+id/ib_ch_categroy"  android:layout_alignParentRight="true"  android:layout_marginRight="5px"  android:background="@drawable/top_right_user"  android:layout_width="wrap_content"  android:layout_height="wrap_content"/></RelativeLayout>


values目录文件

arrays.xml

<?xml version="1.0" encoding="utf-8"?><resources><array name="choice"><item name="start">启动程序</item><item name="detail">详细信息</item><item name="uninstall">卸载程序</item></array></resources>


colors.xml

<?xml version="1.0" encoding="utf-8"?><resources><color name="discuss_blue">#295782</color><color name="white">#FFFFFF</color><color name="black">#000000</color><color name="discuss_writer">#778190</color><color name="gray">#ff888888</color><color name="photo_preview_select_album_layout_bg">#ff3a3a3a</color></resources>


strings.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello">Hello World, MainViewActivity!</string>    <string name="app_name">软件管理器</string></resources>


styles.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <style name="menuTextStyle" parent="@android:style/TextAppearance.Small">        <item name="android:textSize">12.0sp</item>        <item name="android:textColor">@color/menu_text_color</item>    </style>    <style name="menushow">        <item name="android:windowEnterAnimation">@anim/menu_in</item>        <item name="android:windowExitAnimation">@anim/menu_out</item>    </style></resources>

 

anim目录文件

menu_in.xml

<?xml version="1.0" encoding="UTF-8"?><set android:interpolator="@android:anim/decelerate_interpolator"  xmlns:android="http://schemas.android.com/apk/res/android">    <translate android:duration="@android:integer/config_shortAnimTime" android:fromYDelta="25.0%" android:toYDelta="0.0" />    <alpha android:duration="@android:integer/config_shortAnimTime" android:fromAlpha="0.0" android:toAlpha="1.0" /></set>


menu_out.xml

<?xml version="1.0" encoding="UTF-8"?><set android:interpolator="@android:anim/accelerate_interpolator"  xmlns:android="http://schemas.android.com/apk/res/android">    <translate android:duration="@android:integer/config_shortAnimTime" android:fromYDelta="0.0" android:toYDelta="50.0%" />    <alpha android:duration="@android:integer/config_shortAnimTime" android:fromAlpha="1.0" android:toAlpha="0.0" /></set>


color目录文件

menu_text_color.xml

<?xml version="1.0" encoding="UTF-8"?><selector  xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_enabled="true" android:color="#ff031e3a" />    <item android:state_enabled="false" android:color="#ff778797" /></selector>



AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.feioh"      android:versionCode="1"      android:versionName="1.0">    <uses-sdk android:minSdkVersion="8" />    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".HuanyingActivity"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity android:name=".MainViewActivty"/>        <activity android:name=".About"/>    </application></manifest>


JAVA代码展示

com.feioh包

About.java

package com.feioh;import android.app.Activity;import android.os.Bundle;import android.view.Window;import android.view.WindowManager;/** * 关于软件 * @author yalin * */public class About extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//让title不显示requestWindowFeature(Window.FEATURE_NO_TITLE);//全屏显示getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.about);}}


GridViewAdapter.java

package com.feioh;import java.util.List;import android.content.Context;import android.content.pm.PackageInfo;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;/** * GridViewAdapter 软件管理GridView视图的自定义Adapter * @author 雅林 * */public class GridViewAdapter extends BaseAdapter {private List<PackageInfo> packageInfos=null;private LayoutInflater inflater=null;private Context context=null;//构造函数,接收数据public GridViewAdapter(List<PackageInfo> packageInfos,Context context){this.packageInfos=packageInfos;this.context=context;//新方法,inflater对象的作用是将xml文件转换成视图inflater=LayoutInflater.from(context);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn packageInfos.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn packageInfos.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubconvertView =inflater.inflate(R.layout.gridviewitem,null);TextView tv=(TextView) convertView.findViewById(R.id.gv_item_appname);ImageView iv=(ImageView) convertView.findViewById(R.id.gv_item_icon);//得到软件的名称并设置tv.setText(packageInfos.get(position).applicationInfo.loadLabel(context.getPackageManager()));//得到软件的图标并设置iv.setImageDrawable(packageInfos.get(position).applicationInfo.loadIcon(context.getPackageManager()));return convertView;}}


HuanyingActivity.java

package com.feioh;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Window;import android.view.WindowManager;/** * 欢迎界面 * @author yalin * */public class HuanyingActivity extends Activity implements Runnable{@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState); //让title不显示    requestWindowFeature(Window.FEATURE_NO_TITLE);    //全屏显示    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,    WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(R.layout.huanyingmian);        //在每一个Activity的onCreate方法中添加Activity到MyApplication对象实例容器中    MyApplication.getInstance().addActivity(this);        //新开辟一个线程    Thread thread=new Thread(this);thread.start();}@Overridepublic void run() {//线程休息两秒秒钟try{Thread.sleep(3000);}catch (Exception e) {e.printStackTrace();}//跳转到程序页面Intent intent=new Intent(HuanyingActivity.this,MainViewActivty.class);startActivity(intent);//此Activity不在起作用finish();}}


ListViewAdapter.java

package com.feioh;import java.util.List;import android.content.Context;import android.content.pm.PackageInfo;import android.graphics.Typeface;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;/** * ListViewAdapter 软件管理ListView视图的自定义Adapter * @author 雅林 * */public class ListViewAdapter extends BaseAdapter {private List<PackageInfo> packageInfos=null;private Context context=null;private LayoutInflater inflater=null;//构造方法public ListViewAdapter(List<PackageInfo> packageInfos,Context context){this.packageInfos=packageInfos;this.context=context;//新方法,inflater对象的作用是将xml文件转换成视图inflater=LayoutInflater.from(context);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn packageInfos.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn packageInfos.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubconvertView =inflater.inflate(R.layout.listviewitem,null);ImageView iv=(ImageView) convertView.findViewById(R.id.lv_icon);TextView tv1=(TextView) convertView.findViewById(R.id.lv_item_appname);//加粗tv1.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));TextView tv2=(TextView) convertView.findViewById(R.id.lv_item_packagename);//得到软件的图标并设置iv.setImageDrawable(packageInfos.get(position).applicationInfo.loadIcon(context.getPackageManager()));//得到软件的名称并设置tv1.setText(packageInfos.get(position).applicationInfo.loadLabel(context.getPackageManager()));//得到软件的全包名并设置tv2.setText(packageInfos.get(position).packageName);return convertView;}}


MainViewActivity.java

package com.feioh;import java.util.ArrayList;import java.util.List;import android.R.color;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.app.ProgressDialog;import android.content.ComponentName;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.ActivityInfo;import android.content.pm.ApplicationInfo;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.view.Gravity;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.view.Window;import android.view.WindowManager;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.GridView;import android.widget.ImageButton;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.RelativeLayout;import android.widget.Toast;public class MainViewActivty extends Activity implements Runnable {    private GridView gridView=null;    private ListView listView=null;        private List<PackageInfo> packageInfos=null;//用来去的系统中的所有包的信息    private List<PackageInfo> userPackageInfos=null;//用户自己安装的程序    private List<PackageInfo> showPackageInfos=null;//当前显示的安装程序        private ImageButton changeViewBtn=null;//切换List 和 Grid视图    private ImageButton changeCategoryBtn=null;//切换用户应用和切换系统应用按钮        private boolean isUserApp=true;//用来实现系统应用与自己应用的切换    private boolean isListView=true;//用来listview,gridview的切换        private final int SEARCH_APP=0;//线程请求    private ProgressDialog dialog=null;//进度条对话框private int selTitle=0;//底部菜单标题选项IDprivate PopupWindow popup;//定义popupwindowprivate MenuAdapter menuAdapter;//定义菜单GridView适配器private List<MenuInfo> menulists;//菜单项列表private GridView menuGridView;//定义菜单GridView    private boolean isJt=true;//控制小箭头private ImageButton btn=null;//定义小箭头图标        private Handler handler=new Handler(){    //当消息发送过来的时候会执行下面这个方法    public void handleMessage(android.os.Message msg){    super.handleMessage(msg);    if(msg.what==SEARCH_APP){    showPackageInfos = packageInfos;    gridView.setAdapter(new GridViewAdapter(showPackageInfos,     MainViewActivty.this));    listView.setAdapter(new ListViewAdapter(showPackageInfos,    MainViewActivty.this));    dialog.dismiss();//让dialog消失    }    };    };        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //让title不显示        requestWindowFeature(Window.FEATURE_NO_TITLE);        //全屏显示//        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,//        WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(R.layout.main);                //得到小箭头,点击小箭头        btn=(ImageButton) findViewById(R.id.btn_jiantou);        btn.setOnClickListener(new OnClickListener() {        //得到广告视图LinearLayout linear=(LinearLayout) findViewById(R.id.top_gg_lay);@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(isJt){linear.setVisibility(View.GONE);btn.setBackgroundResource(R.drawable.jiantouxia);isJt=false;}else{linear.setVisibility(View.VISIBLE);btn.setBackgroundResource(R.drawable.jiantou);isJt=true;}}});                                //初始化底部菜单        initPopuWindows();                //分别得到listView和gridView视图        listView=(ListView) findViewById(R.id.lv_apps);        gridView=(GridView) findViewById(R.id.gridView);                //显示dialog,正在搜索。。。        dialog = ProgressDialog.show(this, "Waiting please ....", "正在搜索所安装的应用程序",true,false);                //得到切换视图按钮        changeViewBtn=(ImageButton) findViewById(R.id.ib_ch_view);        changeViewBtn.setOnClickListener(topClick);        //得到切换程序按钮        changeCategoryBtn=(ImageButton) findViewById(R.id.ib_ch_categroy);        changeCategoryBtn.setOnClickListener(topClick);                gridView.setOnItemClickListener(listener);listView.setOnItemClickListener(listener);//开辟一个线程Thread thread=new Thread(this);thread.start();//在每一个Activity的onCreate方法中添加Activity到MyApplication对象实例容器中    MyApplication.getInstance().addActivity(this);    }        //应用程序执行事件    OnItemClickListener listener=new OnItemClickListener() {    @Override    public void onItemClick(AdapterView<?> parent, View view, int position,    long id) {    //通过positon取出对应的packageInfo    final PackageInfo packageInfo=showPackageInfos.get(position);    //创建一个Dialog用来进行选择    AlertDialog.Builder builder=    new AlertDialog.Builder(MainViewActivty.this);    builder.setTitle("选项");    //接受一个资源的ID    builder.setItems(R.array.choice,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 这里面用来写单击对话框各项时候的事件处理switch (which) {case 0:String packageName=packageInfo.packageName;ActivityInfo activityInfo=packageInfo.activities[0];if(activityInfo==null){Toast.makeText(MainViewActivty.this, "没有任何activity", Toast.LENGTH_SHORT).show();return;}String activityName=activityInfo.name;Intent intent=new Intent();//通过报名和类名来启动应用程序intent.setComponent(new ComponentName(packageName,activityName));startActivity(intent);break;case 1:Builder builder=new Builder(MainViewActivty.this);builder.setTitle("详细信息");builder.setIcon(packageInfo.activities[0].icon);builder.setPositiveButton("确定", null);builder.setMessage("程序名称:"+packageInfo.activities[0].name+"\n"+"包名:"+packageInfo.packageName+"\n"+"版本号:"+packageInfo.versionCode+"\n"+"版本名:"+packageInfo.versionName);builder.show();break;case 2:Uri packageUri=Uri.parse("package:"+packageInfo.packageName);Intent deleteIntent=new Intent();deleteIntent.setAction(Intent.ACTION_DELETE);deleteIntent.setData(packageUri);//这句话是为了解决删除完应用后,程序图标仍然存在的bugstartActivityForResult(deleteIntent, 0);break;}}});    //此处设为null,即默认就实现了关闭功能    builder.setNegativeButton("取消", null);    builder.create().show();    }};    //头部菜单点击事件OnClickListener topClick=new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//如果点击的是 头部菜单左边按钮if(v.getId()==R.id.ib_ch_view){//让GridView 消失,让ListView显示if(isListView==true){listView.setVisibility(View.VISIBLE);gridView.setVisibility(View.GONE);isListView=false;v.setBackgroundResource(R.drawable.top_left_grid);}else{//让ListView消失,让GridView显示listView.setVisibility(View.GONE);gridView.setVisibility(View.VISIBLE);isListView=true;v.setBackgroundResource(R.drawable.top_left_list);}}//如果点击的头部菜单是  右边按钮if(v.getId()==R.id.ib_ch_categroy){//把用户应用 作为要显示的应用if(isUserApp){v.setBackgroundResource(R.drawable.top_right_all);showPackageInfos=userPackageInfos;isUserApp=false;}else{//把系统应用作为要显示的应用v.setBackgroundResource(R.drawable.top_right_user);showPackageInfos=packageInfos;isUserApp=true;}//为listView和gridView设置适配器gridView.setAdapter(new GridViewAdapter(showPackageInfos,MainViewActivty.this));    listView.setAdapter(new ListViewAdapter(showPackageInfos,MainViewActivty.this));}}};    //重写菜单按钮时  必须要重写的方法@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// 创建MENUmenu.add("menu");// 必须创建一项return super.onCreateOptionsMenu(menu);}//重写菜单按钮@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {// TODO Auto-generated method stubif (popup != null) {//得到所有菜单项列表   menulists = MenuUtils.getMenuList();   //为适配器设置数据(list<MenuInfo>)   menuAdapter = new MenuAdapter(this, menulists);   //为GridView填充数据   menuGridView.setAdapter(menuAdapter);   //显示popup   popup.showAtLocation(this.findViewById(R.id.mianxmllay), Gravity.BOTTOM, 0, 0);   }return false;} //这个新开辟的线程 主要用来获取系统应用所有包 和 用户应用所有包    @Override    public void run() {    System.out.println(Thread.currentThread().getName());    //获得系统中所有包    packageInfos=getPackageManager().getInstalledPackages(    PackageManager.GET_UNINSTALLED_PACKAGES|PackageManager.GET_ACTIVITIES);    //实例化用户自己安装的程序    userPackageInfos=new ArrayList<PackageInfo>();    for (PackageInfo temp:packageInfos) {boolean flag=false;ApplicationInfo appInfo=temp.applicationInfo;if((appInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)!=0){//更新过的系统应用程序flag=true;}else if((appInfo.flags&ApplicationInfo.FLAG_SYSTEM)==0){//用户自己的应用程序flag=true;}if(flag){userPackageInfos.add(temp);}}    //发送一个信息给主线程,让主线程把progressDialog给取消掉    handler.sendEmptyMessage(SEARCH_APP);    }    //设置PopupWindows    private void initPopuWindows()    {    //初始化GridView    menuGridView=(GridView) View.inflate(this,R.layout.gridview_menu,null);    //初始化PopupWindow,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT控制显示    popup=new PopupWindow(menuGridView,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);    // 设置menu菜单背景    popup.setBackgroundDrawable(getResources().getDrawable(R.drawable.menu_background));    // menu菜单获得焦点 如果没有获得焦点menu菜单中的控件事件无法响应    popup.setFocusable(true);    //设置显示和隐藏的动画    popup.setAnimationStyle(R.style.menushow);    popup.update();    //设置触摸获取焦点    menuGridView.setFocusableInTouchMode(true);    //设置键盘事件,如果按下菜单键则隐藏菜单    menuGridView.setOnKeyListener(new android.view.View.OnKeyListener() {    public boolean onKey(View v, int keyCode, KeyEvent event) {    if ((keyCode == KeyEvent.KEYCODE_MENU) && (popup.isShowing())) {    popup.dismiss();      return true;    }else{    return false;    }    }    });    //添加菜单按钮事件    menuGridView.setOnItemClickListener(new OnItemClickListener() {    public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {    // TODO Auto-generated method stub    MenuInfo mInfo = menulists.get(position);    popup.dismiss();    if (mInfo.ishide) {    return;    }    switch (mInfo.menuId) {    case MenuUtils.MENU_LIEBIAO:    //以List列表显示    listView.setVisibility(View.VISIBLE);    gridView.setVisibility(View.GONE);    isListView=false;    break;    case MenuUtils.MENU_WANGGE:    //以网格列表显示    listView.setVisibility(View.GONE);    gridView.setVisibility(View.VISIBLE);    isListView=true;    break;    case MenuUtils.MENU_USERAPP:    //显示用户应用    showPackageInfos=userPackageInfos;    isUserApp=false;    //为listView和gridView设置适配器    gridView.setAdapter(new GridViewAdapter(showPackageInfos,MainViewActivty.this));        listView.setAdapter(new ListViewAdapter(showPackageInfos,MainViewActivty.this));    break;    case MenuUtils.MENU_SYSAPP:    //显示系统应用    showPackageInfos=packageInfos;    isUserApp=true;    //为listView和gridView设置适配器    gridView.setAdapter(new GridViewAdapter(showPackageInfos,MainViewActivty.this));        listView.setAdapter(new ListViewAdapter(showPackageInfos,MainViewActivty.this));   break;  case MenuUtils.MENU_SOFTSM:  //跳转程序说明Activity  Intent intent=new Intent(MainViewActivty.this,About.class);  startActivity(intent);   break;    case MenuUtils.MENU_APPADD:    //关于添加软件    AlertDialog.Builder alertBuilderadd=new Builder(MainViewActivty.this);    alertBuilderadd.setIcon(R.drawable.icon).setTitle("友情提示...").setMessage("功能尚未开发^_^");    alertBuilderadd.setPositiveButton("返回",new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {    // TODO Auto-generated method stub    dialog.cancel();    }    }).create();    alertBuilderadd.show();    break;    case MenuUtils.MENU_APPSOSO:    //软件搜索    AlertDialog.Builder alertBuildersoso=new Builder(MainViewActivty.this);    alertBuildersoso.setIcon(R.drawable.icon).setTitle("友情提示...").setMessage("功能尚未开发^_^");    alertBuildersoso.setPositiveButton("返回",new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {    // TODO Auto-generated method stub    dialog.cancel();    }    }).create();    alertBuildersoso.show();    break;    case MenuUtils.MENU_LOGOUT:    //退出程序    AlertDialog.Builder alertbBuilder = new AlertDialog.Builder(MainViewActivty.this);               alertbBuilder.setIcon(R.drawable.icon).setTitle("友情提示...").setMessage("你确定要离开吗?");               alertbBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {               @Override                public void onClick(DialogInterface dialog, int which) {              //在需要结束所有Activity的时候调用exit方法                MyApplication.getInstance().exit();              }                 });                 alertbBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {                      @Override                     public void onClick(DialogInterface dialog, int which) {                      dialog.cancel();                      }                 }).create();                 alertbBuilder.show();    break;    }    }    });    }}


MenuAdapter.java

package com.feioh;import java.util.List;import javax.crypto.spec.PSource;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;/** *  * @author yalin * 底部菜单 适配器,返回的是 GridView的每一项 * */public class MenuAdapter extends BaseAdapter {private final List<MenuInfo> list;private final LayoutInflater inflater;public MenuAdapter(Context context,List<MenuInfo> list){this.list=list;inflater=LayoutInflater.from(context);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubif(convertView==null){//得到每一项 视图convertView=inflater.inflate(R.layout.menu_item,null);}MenuInfo menuinfo=list.get(position);//得到每一项的视图ImageView iv=(ImageView) convertView.findViewById(R.id.item_image);TextView tv=(TextView) convertView.findViewById(R.id.item_text);//为每一项 设置图片和文字 信息iv.setImageResource(menuinfo.imgsrc);tv.setText(menuinfo.title);if(menuinfo.ishide){iv.setAlpha(80);}return convertView;}}


MenuInfo.java

package com.feioh;public class MenuInfo {public String title;//标题public int imgsrc;//图片资源public boolean ishide;//是否隐藏public int menuId;//menuIdpublic MenuInfo(int menuId, String title,int imgsrc,Boolean ishide){this.menuId=menuId;this.title=title;this.imgsrc=imgsrc;this.ishide=ishide;} }


MenuUtils.java

package com.feioh;import java.util.ArrayList;import java.util.List;public class MenuUtils {public static final int MENU_LIEBIAO=1;public static final int MENU_WANGGE=2;public static final int MENU_USERAPP=3;public static final int MENU_SYSAPP=4;public static final int MENU_APPADD=5;public static final int MENU_APPSOSO=6;public static final int MENU_SOFTSM=7;public static final int MENU_LOGOUT=8;/** * 获取当前菜单列表 * @return */public static List<MenuInfo> getMenuList(){List<MenuInfo> list=new ArrayList<MenuInfo>();list.add(new MenuInfo(MENU_LIEBIAO,"列表视图",R.drawable.menu_ic_setting,false));list.add(new MenuInfo(MENU_WANGGE,"网格视图",R.drawable.menu_ic_logout,false));list.add(new MenuInfo(MENU_USERAPP,"用户应用",R.drawable.menu_ic_help,false));list.add(new MenuInfo(MENU_SYSAPP,"系统应用",R.drawable.menu_ic_exit,false));list.add(new MenuInfo(MENU_APPADD,"应用添加",R.drawable.menu_ic_search_friend,false));list.add(new MenuInfo(MENU_APPSOSO,"应用搜索",R.drawable.menu_ic_addgroup,false));list.add(new MenuInfo(MENU_SOFTSM,"系统说明",R.drawable.menu_ic_addfriend,false));list.add(new MenuInfo(MENU_LOGOUT,"退出系统",R.drawable.menu_ic_search_friend,false));return list;}}


MyApplication.java

package com.feioh;import java.util.LinkedList;import java.util.List;import android.app.Activity;import android.app.Application;/*** 在每一个Activity的onCreate方法中添加Activity到MyApplication对象实例容器中* MyApplication.getInstance().addActivity(this);* 在需要结束所有Activity的时候调用exit方法* MyApplication.getInstance().exit();* */public class MyApplication extends Application {private List<Activity> activityList=new LinkedList<Activity>();private static MyApplication instance;private MyApplication(){}//单例模式中 获取唯一的MyApplication实例public static MyApplication getInstance(){if(instance==null){instance=new MyApplication();}return instance;}//添加Activity到容器中public void addActivity(Activity activity){activityList.add(activity);}//遍历所有Activity,并finishpublic void exit(){for(Activity activity:activityList){activity.finish();}System.exit(0);}}


 

源代码下载地址:Android平台手机UI应用开发——软件管理器




 

原创粉丝点击