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应用开发——软件管理器
- Android平台手机UI应用开发——软件管理器
- 【android开发】手机应用管理器的实现之实现软件加锁(四)
- Android应用开发———Android中的布局管理器
- 【android开发】手机应用管理器的实现之获取应用列表(一)
- 【android开发】手机应用管理器的实现之获取应用列表(一)
- Android平台的手机记账应用开发视频教程
- Android学习——软件管理器之一
- Android手机开发工具 mt管理器
- 全向移动平台android版手机控制器——UI界面设计
- 【android开发】手机应用管理器的实现之实现popupWindow类对话框(二)
- 【android开发】手机应用管理器的实现之实现popupWindow类对话框(二)
- Android 软件管理器的开发1
- 手机应用管理器
- android应用——木纹质感的手机通话键盘UI
- Android手机平台的软件管家
- 【Android应用开发技术:用户界面】布局管理器
- Android UI——手机信息页面
- Android UI——手机信息页面
- f2py::演示Fortran字符串在python中的用法
- Java程序员从笨鸟到菜鸟之(十七)CSS基础积累总结(下)
- [转]Blender2.5快捷键
- delphi程序调试
- 主题:关于REST的一点想法,欢迎大家讨论。
- Android平台手机UI应用开发——软件管理器
- Linux中搜索目录和子目录下含有关键字的文件
- TCP/IP中的TTL
- Java程序员从笨鸟到菜鸟之(十八)JSP基本语法与动作指令
- object-c学习:description方法:
- What is server farm in Sharepoint?
- Android开发者指南—— AIDL
- ruby中类的写法以及属性,实例变量,类方法的用法 .
- I - Expanding Rods解题报告(黄杰)