Android创建Launcher应用程序
实现自定义Launcher中显示所有应用程序图标,且可以点击进入响应的程序。
activity_main.xml布局
<GridView
android:id="@+id/gv_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:columnWidth="96dp"
android:verticalSpacing="12dp"
android:horizontalSpacing="12dp"
android:stretchMode="columnWidth"
android:gravity="center">
</GridView>
自定义GridView实现ImageView+TextView
参考我的另一篇博客:GridView实现ImageView+TextView
MainActivity.c实现点击图标进入相应程序
public class MainActivity extends AppCompatActivity {
GridView mGridView;
//应用的图标,名称,包名
GridInfo mGridInfo;
List<GridInfo> mGridInfoList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//隐藏ActionBar
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
setContentView(R.layout.activity_main);
//初始化数据
init();
//初始化View
initView();
}
private void init() {
//获取所有可显示的应用信息
Intent mainInent = new Intent(Intent.ACTION_MAIN,null);
mainInent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(mainInent, 0);
//保存数据
mGridInfoList = new ArrayList();
for(ResolveInfo resolveInfo:resolveInfos){
Drawable icon = resolveInfo.activityInfo.loadIcon(getPackageManager());
String title = resolveInfo.activityInfo.loadLabel(getPackageManager()).toString();
String packageName = resolveInfo.activityInfo.packageName;
mGridInfo = new GridInfo(icon, title, packageName);
mGridInfoList.add(mGridInfo);
}
}
private void initView() {
mGridView = (GridView) findViewById(R.id.gv_item);
GridItemAdapter mAdapter = new GridItemAdapter(this,mGridInfoList);
mGridView.setAdapter(mAdapter);
//点击图标打开应用
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
try {
String packageName = mGridInfoList.get(position).getPackageName();
Intent intent = MainActivity.this.getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(intent);
}catch (Exception e){
Toast.makeText(MainActivity.this,"该应用无法直接打开",Toast.LENGTH_SHORT).show();
}
}
});
}
}
实现效果如下:
点击图标可以进入相应的程序