首页 android手把手教你开发launcher

android手把手教你开发launcher

举报
开通vip

android手把手教你开发launcherlauncher,也就是android的桌面应用程序。下图是android2.3的launcher应用程序:     接下来我们要开发一个自己的launcher,使其替代系统的默认launcher。 怎样使我们的应用程序成为一个launcher? 下面我们就新建一个叫做MyHome的工程,具体步骤略。创建完工程后整个目录结构如下图:   现在我们的AndroidManifest.xml文件这样的:<?xmlversion="1.0"encod...

android手把手教你开发launcher
launcher,也就是android的桌面应用程序。下图是android2.3的launcher应用程序:     接下来我们要开发一个自己的launcher,使其替代系统的默认launcher。 怎样使我们的应用程序成为一个launcher? 下面我们就新建一个叫做MyHome的工程,具体步骤略。创建完工程后整个目录结构如下图:   现在我们的AndroidManifest.xml文件这样的:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"      package="org.bangchui.myhome"      android:versionCode="1"      android:versionName="1.0">      <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">        <activityandroid:name=".MyHome"                  android:label="@string/app_name">            <intent-filter>                <actionandroid:name="android.intent.action.MAIN"/>                <categoryandroid:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity>     </application></manifest>请注意<intent-filter> </intent-filter>里面的内容。 下面我们在其中添加上以下两行:?12<categoryandroid:name="android.intent.category.HOME"/><categoryandroid:name="android.intent.category.DEFAULT"/>此时AndroidManifest.xml文件是这样:?1234567891011121314151617181920<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"      package="org.bangchui.myhome"      android:versionCode="1"      android:versionName="1.0">      <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">        <activityandroid:name=".MyHome"                  android:label="@string/app_name">            <intent-filter>                <actionandroid:name="android.intent.action.MAIN"/>                <categoryandroid:name="android.intent.category.LAUNCHER"/>                <categoryandroid:name="android.intent.category.HOME"/>                <categoryandroid:name="android.intent.category.DEFAULT"/>            </intent-filter>        </activity>     </application></manifest>此时运行程序,我们看不到任何特别之处。当按下home键时(模拟器上按下home会调出桌面应用),程序如图:   我们看到了,我们开发的Myhome跟Launcher出现在了一起。  重启模拟器,我们看到我们自己的程序已经可以作为home来运行了。 ok。第一步完成了:把我们的应用程序作为home。 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 一下:要把我们的应用程序作为home,只需要在AndroidManifest.xml中添加:  <categoryandroid:name="android.intent.category.HOME"/>  <categoryandroid:name="android.intent.category.DEFAULT"/>android手把手教你开发launcher(二) 第二课:列出安装的应用程序 预备知识:GridView的使用\改写BaseAdapter  列出已经安装的应用程序是作为launcher比不可少的功能。下面我们就讲解怎样将应用程序列出来。程序运行后的样子如下:   一.修改main.xml,在其中添加一个GridView用来显示应用程序列表。 修改后如下: ?123456789101112<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"android:layout_width="fill_parent"    android:layout_height="fill_parent">         <GridViewandroid:layout_width="match_parent"        android:id="@+id/apps_list"        android:numColumns="4"        android:layout_height="wrap_content">    </GridView> </LinearLayout> 二.通过PackageManager的api查询已经安装的apk 我们写一个叫做loadApps的方法将活得的应用程序列表放到privateList<ResolveInfo>mApps;中,如下:?123456privatevoidloadApps(){        IntentmainIntent=newIntent(Intent.ACTION_MAIN,null);        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);         mApps=getPackageManager().queryIntentActivities(mainIntent,0);    }‘ 三.实现用于显示Gridview的Adapter,使其显示获得的应用程序列表 直接上代码:?123456789101112131415161718192021222324252627282930313233343536373839404142publicclassAppsAdapterextendsBaseAdapter{        publicAppsAdapter(){        }          publicViewgetView(intposition,ViewconvertView,ViewGroupparent){            ImageViewi;              if(convertView==null){                i=newImageView(MyHome.this);                i.setScaleType(ImageView.ScaleType.FIT_CENTER);                i.setLayoutParams(newGridView.LayoutParams(50,50));            }else{                i=(ImageView)convertView;            }              ResolveInfoinfo=mApps.get(position);            i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));              returni;        }            publicfinalintgetCount(){            returnmApps.size();        }          publicfinalObjectgetItem(intposition){            returnmApps.get(position);        }          publicfinallonggetItemId(intposition){            returnposition;        }    } 最后整个Activity的代码如下?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687packageorg.bangchui.myhome;  importjava.util.List;  importandroid.app.Activity;importandroid.content.Intent;importandroid.content.pm.ResolveInfo;importandroid.os.Bundle;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.GridView;importandroid.widget.ImageView;  publicclassMyHomeextendsActivity{      GridViewmGrid;         /**Calledwhentheactivityisfirstcreated.*/    @Override    publicvoidonCreate(BundlesavedInstanceState){        super.onCreate(savedInstanceState);                 loadApps();        setContentView(R.layout.main);        mGrid=(GridView)findViewById(R.id.apps_list);        mGrid.setAdapter(newAppsAdapter());    }              privateList<ResolveInfo>mApps;      privatevoidloadApps(){        IntentmainIntent=newIntent(Intent.ACTION_MAIN,null);        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);          mApps=getPackageManager().queryIntentActivities(mainIntent,0);    }      publicclassAppsAdapterextendsBaseAdapter{        publicAppsAdapter(){        }          publicViewgetView(intposition,ViewconvertView,ViewGroupparent){            ImageViewi;              if(convertView==null){                i=newImageView(MyHome.this);                i.setScaleType(ImageView.ScaleType.FIT_CENTER);                i.setLayoutParams(newGridView.LayoutParams(50,50));            }else{                i=(ImageView)convertView;            }              ResolveInfoinfo=mApps.get(position);            i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));              returni;        }            publicfinalintgetCount(){            returnmApps.size();        }          publicfinalObjectgetItem(intposition){            returnmApps.get(position);        }          publicfinallonggetItemId(intposition){            returnposition;        }    }}第三课启动安装的应用程序 1.监听GridView的onItemClick事件 设置一个监听器是为了当gridView的某项被点击时,会有一个回调函数通知我们。 我们调用mGrid.setOnItemClickListener(listener);设置一个监听器 mGrid.setOnItemClickListener(listener)中的listener是一个接口,其类型为:android.widget.AdapterView.OnItemClickListener,如下图所示:   下面我们new一个android.widget.AdapterView.OnItemClickListener类型的对象作为参数。我们直接使用eclipde的自动补全功能来完成OnItemClickListener的定义:?12345privateOnItemClickListenerlistener=newOnItemClickListener(){@OverridepublicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){}}; 接口OnItemClickListener中有一个方法叫做onItemClick,我们实现它即可。下面我对onItemClick的几个参数略作说明: parent    略 view          被点击的view position    被点击项的位置 id            被点击项的id 2.启动被点击应用的activity 一般来讲,我们根据position即可知道被点击的项目是哪一项了。现在我们根据被点击的项目,取出对应的应用程序数据(主要是其中的主activity),然后启动activity。用下面代码实现:?123456789101112131415@Override        publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){            ResolveInfoinfo=mApps.get(position);                         //该应用的包名            Stringpkg=info.activityInfo.packageName;            //应用的主activity类            Stringcls=info.activityInfo.name;                         ComponentNamecomponet=newComponentName(pkg,cls);                         Intenti=newIntent();            i.setComponent(componet);            startActivity(i);        } 例如,我们点击计算器时,启动了计算器,如下图:   现在整个类代码如下:复制代码1. packageorg.bangchui.myhome;2. 3. importjava.util.List;4. 5. importandroid.app.Activity;6. importandroid.content.ComponentName;7. importandroid.content.Intent;8. importandroid.content.pm.ResolveInfo;9. importandroid.os.Bundle;10. importandroid.view.View;11. importandroid.view.ViewGroup;12. importandroid.widget.AdapterView;13. importandroid.widget.BaseAdapter;14. importandroid.widget.GridView;15. importandroid.widget.ImageView;16. importandroid.widget.AdapterView.OnItemClickListener;17. 18. publicclassMyHomeextendsActivity{19.     privateList<ResolveInfo>mApps;20.     GridViewmGrid;21.     privateOnItemClickListenerlistener=newOnItemClickListener(){22.         @Override23.         publicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid){24.             ResolveInfoinfo=mApps.get(position);25.             26.             //该应用的包名27.             Stringpkg=info.activityInfo.packageName;28.             //应用的主activity类29.             Stringcls=info.activityInfo.name;30.             31.             ComponentNamecomponet=newComponentName(pkg,cls);32.             33.             Intenti=newIntent();34.             i.setComponent(componet);35.             startActivity(i);36.         }37. 38.     };39. 40.     /**Calledwhentheactivityisfirstcreated.*/41.     @Override42.     publicvoidonCreate(BundlesavedInstanceState){43.         super.onCreate(savedInstanceState);44. 45.         loadApps();46.         setContentView(R.layout.main);47.         mGrid=(GridView)findViewById(R.id.apps_list);48.         mGrid.setAdapter(newAppsAdapter());49. 50.         mGrid.setOnItemClickListener(listener);51.     }52. 53. 54.     privatevoidloadApps(){55.         IntentmainIntent=newIntent(Intent.ACTION_MAIN,null);56.         mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);57. 58.         mApps=getPackageManager().queryIntentActivities(mainIntent,0);59.     }60. 61.     publicclassAppsAdapterextendsBaseAdapter{62.         publicAppsAdapter(){63.         }64. 65.         publicViewgetView(intposition,ViewconvertView,ViewGroupparent){66.             ImageViewi;67. 68.             if(convertView==null){69.                 i=newImageView(MyHome.this);70.                 i.setScaleType(ImageView.ScaleType.FIT_CENTER);71.                 i.setLayoutParams(newGridView.LayoutParams(50,50));72.             }else{73.                 i=(ImageView)convertView;74.             }75. 76.             ResolveInfoinfo=mApps.get(position);77.             i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));78. 79.             returni;80.         }81. 82.         publicfinalintgetCount(){83.             returnmApps.size();84.         }85. 86.         publicfinalObjectgetItem(intposition){87.             returnmApps.get(position);88.         }89. 90.         publicfinallonggetItemId(intposition){91.             returnposition;92.         }93.     }
本文档为【android手把手教你开发launcher】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
飞哥
暂无简介~
格式:doc
大小:800KB
软件:Word
页数:20
分类:企业经营
上传时间:2018-05-11
浏览量:12