Android实现定制桌面

实现定制桌面:
在App的主MainActivity里面获取系统所有App并且使用GridView显示出来

创建Android项目 5.1系统 项目名为:AndroidCusyomDesktopDemo

XML文件:
一.在MainActivity(使用线性布局,纵向)里创建一个GridView控件

< GridView
        android:id="@+id/gv_mainshow"
        android:numColumns="4"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

二.创建item界面,在里面添加一个ImageView以及TextView:
< ImageView
android:id=”@+id/gridiv_image_item”
android:layout_width=”100dp”
android:layout_height=”80dp”
android:src=”@drawable/jacket”
/>
TextView
android:id=”@+id/gridtv_text_item”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_below=”@+id/gridiv_image_item”
android:layout_centerInParent=”true”
android:text=”test”
/>
Java文件:
三.创建Grid对象以及存放item的List以及存放应用信息类型ResolveInfo的list

private List<ResolveInfo> rilist;//应用信息类型
    private List<Map<String,Object>> list = new          ArrayList<Map<String,Object>>();
    private GridView gvmain;

四.在onCreate方法下实现init方法,init方法主要是把应用信息的list获取到,并把存放item的list填充满

 private void init(){
        Intent intent = new Intent(Intent.ACTION_MAIN,null); //应用程序最先启动的Activity 
        intent.addCategory(Intent.CATEGORY_LAUNCHER);        //应用程序是否显示在程序列表里
        rilist = getPackageManager().queryIntentActivities(intent,0); //得到应用信息列表
        for (int i = 0;i<rilist.size();i++){
            Map<String,Object> maps = new HashMap<String,Object>();
            maps.put("itemImage",rilist.get(i).activityInfo.loadIcon(getPackageManager()));
            maps.put("itemText",rilist.get(i).activityInfo.loadLabel(getPackageManager()));
            list.add(maps);
        }
    }

五.获取GridView控件,并创建SimpleAdapter,并实现simpleAdapter.setViewBinder方法(这个方法主要用于检测图片是否被设置成功)

gvmain = (GridView) findViewById(R.id.gv_mainshow);
//参数 context,Data(存放的数据一般是list<Map<String,Objcet>> String也是可以int型),要显示的格局item,要显示格局里的控件的key,要显示格局里的控件id
        SimpleAdapter simpleAdapter = new SimpleAdapter(
                this,
                list,
                R.layout.grid_item,
                new String[]{"itemImage","itemText"},
                new int[]{R.id.gridiv_image_item,R.id.gridtv_text_item});
//如果不加这个图片判断,则会显示不出来图标
        simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() {
            @Override
            public boolean setViewValue(View view, Object o, String s) {
                if(view instanceof ImageView && o instanceof Drawable){ //判断得到的view是否为ImageView的子类和o是否为Drawble的子类
                    ImageView iv = (ImageView) view;                    //如果是,就把图片设置上,并返回true
                    iv.setImageDrawable((Drawable) o);
                    return true;
                }

                return false;
            }
        });

六.gvmain.setAdapter(),并设置OnItemClickListener Item监听

gvmain.setAdapter(simpleAdapter);
    gvmain.setOnItemClickListener(listener);

七.创建AdapterView.OnItemClickListener 对象listener,实现其onItemClick方“`

private AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            ResolveInfo info = rilist.get(i);  //得到被按下的item 应用
//get app's packageName
            String packagename = info.activityInfo.packageName;
            //get app's  Class activity
            String mainActivity = info.activityInfo.name;
//把获取到的信息封装到component里,然后使用Intent的setComponent,启动Intent
            ComponentName component = new ComponentName(packagename,mainActivity);
            Intent intent = new Intent();
            intent.setComponent(component);
            startActivity(intent);
        }
    };

效果图:这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值