Launcher是Android的应用程序启动器,Launcher的功能 还包含:桌面的切换、应用程序快捷 (shortcut)功能、背景图(Wallpaper)功能等等。在Android的桌面最下方,有一个图示,按下后可以拉出应用程序图示清单,这是Launcher提供的功能。

我们这个实例是用GridView来实现Launcher效果的, 下面的截屏显示本实例的效果图:

Android中Launcher实例_第1张图片

源代码如下:

main.xml布局文件,只有一个GridView:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>

GridView的每一个Item也需要一个布局文件,用来定义应用的图标与标题,application_layout.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>

主程序文件,Launcher.java:

package com.test.launcher; import java.util.Collections; import java.util.List; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; public class Launcher extends Activity implements OnItemClickListener { private GridView mGridView; private Context mContext; private PackageManager mPackageManager; private List<ResolveInfo> mAllApps; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } public void setupViews() { mContext = Launcher.this; mPackageManager = getPackageManager(); mGridView = (GridView) findViewById(R.id.gridview); bindAllApps(); // GridView中放入数据 mGridView.setAdapter(new GridItemAdapter(mContext, mAllApps)); mGridView.setNumColumns(4); mGridView.setOnItemClickListener(this); } public void bindAllApps() { // 应用中总有一个activity申明成这两个属性,也就是应用的入口 Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); // 包含上面两个属性的全部查出来,并且排序 mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0); Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator( mPackageManager)); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ResolveInfo res = mAllApps.get(position); // 该应用的包名和主Activity String pkg = res.activityInfo.packageName; String cls = res.activityInfo.name; ComponentName componet = new ComponentName(pkg, cls); Intent intent = new Intent(); intent.setComponent(componet); startActivity(intent); } private class GridItemAdapter extends BaseAdapter { private Context context; private List<ResolveInfo> resInfo; public GridItemAdapter(Context c, List<ResolveInfo> res) { context = c; resInfo = res; } @Override public int getCount() { return resInfo.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(context).inflate( R.layout.application_layout, null); ImageView imageView = (ImageView) convertView .findViewById(R.id.imageview); TextView textView = (TextView) convertView .findViewById(R.id.textview); ResolveInfo res = resInfo.get(position); imageView.setImageDrawable(res.loadIcon(mPackageManager)); textView.setText(res.loadLabel(mPackageManager).toString()); return convertView; } } }

几点说明:

  1. 函数setupViews()是建立Launcher桌面的Views的。setupViews里面的函数bindAllApps()是把Activity里面所有符合特定Intent的结果查出来,结果封装在ResolveInfo的List里面。可以通过ResolveInfo获取到应用的图标及标签。
  2. 包android.content.pm所含的类负责获取应用程序包的信息,包括关于activities,permissions,services,signatures和providers的信息。

更多相关文章

  1. Android应用程序与SurfaceFlinger服务的关系概述和学习计划 .
  2. (20120722)(笔记004)android开发应用程序资源
  3. Building Your First App(创建你的第一个应用程序)
  4. Android 源码编译AIDL 使用实例讲解及Android Studio AIDL的调用
  5. (转帖)Android开发者应该如何推广营销自己的应用程序
  6. android应用中去android市场去评分的功能实现(吐槽一波个人应用上
  7. 电商应用开发实例分享:《凡客移动应用之Android + HTML5技术运用
  8. 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内
  9. Android Camer2与Camera1 自定义相机拍照封装实例讲解

随机推荐

  1. Android(安卓)Fragment解析以及Fragment
  2. Android(安卓)ImageReader使用
  3. Android---SharedPreferences使用
  4. 【流媒體】Android(安卓)实时视频采集—C
  5. [置顶] Android(安卓)Camera系统
  6. Android中用BaseAdapter实现带Button和显
  7. Android中自定义View的MeasureSpec使用
  8. android从驱动到应用之驱动层(一)
  9. Android(安卓)ANT工程创建
  10. 成功开发Android(安卓)app-5(视图)