android手把手教你开发launcher(二)
2016-04-28 10:17
537 查看
预备知识: GridView的使用 \ 改写BaseAdapter
列出已经安装的应用程序是作为launcher比不可少的功能。下面我们就讲解怎样将应用程序列出来。程序运行后的样子如下:
一. 修改main.xml,在其中添加一个GridView用来显示应用程序列表。
修改后如下:
[html] view
plain copy
print?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<GridView android:layout_width="match_parent"
android:id="@+id/apps_list"
android:numColumns="4"
android:layout_height="wrap_content">
</GridView>
</RelativeLayout>
二 . 通过PackageManager的api 查询已经安装的apk
我们写一个叫做loadApps的方法将活得的应用程序列表放到private List<ResolveInfo> mApps; 中,如下:
[java] view
plain copy
print?
private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
new ImageView(MainActivity.this);
mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
}
三. 实现用于显示Gridview的Adapter,使其显示获得的应用程序列表
直接上代码:
?
[java] view
plain copy
print?
public class AppsAdapter extends BaseAdapter {
public AppsAdapter(){
}
@Override
public int getCount() {
return apps.size();
}
@Override
public Object getItem(int i) {
return apps.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView iv;
if(view == null){
iv = new ImageView(MainActivity.this);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
iv = (ImageView) view;
}
ResolveInfo info = apps.get(i);
iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return iv;
}
}
最后整个Activity的代码如下
[java] view
plain copy
print?
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private List<ResolveInfo> apps;
private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
new ImageView(MainActivity.this);
apps = getPackageManager().queryIntentActivities(mainIntent, 0);
}
public class AppsAdapter extends BaseAdapter {
public AppsAdapter(){
}
@Override
public int getCount() {
return apps.size();
}
@Override
public Object getItem(int i) {
return apps.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView iv;
if(view == null){
iv = new ImageView(MainActivity.this);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
iv = (ImageView) view;
}
ResolveInfo info = apps.get(i);
iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return iv;
}
}
}
列出已经安装的应用程序是作为launcher比不可少的功能。下面我们就讲解怎样将应用程序列出来。程序运行后的样子如下:
一. 修改main.xml,在其中添加一个GridView用来显示应用程序列表。
修改后如下:
[html] view
plain copy
print?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<GridView android:layout_width="match_parent"
android:id="@+id/apps_list"
android:numColumns="4"
android:layout_height="wrap_content">
</GridView>
</RelativeLayout>
二 . 通过PackageManager的api 查询已经安装的apk
我们写一个叫做loadApps的方法将活得的应用程序列表放到private List<ResolveInfo> mApps; 中,如下:
[java] view
plain copy
print?
private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
new ImageView(MainActivity.this);
mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
}
三. 实现用于显示Gridview的Adapter,使其显示获得的应用程序列表
直接上代码:
?
[java] view
plain copy
print?
public class AppsAdapter extends BaseAdapter {
public AppsAdapter(){
}
@Override
public int getCount() {
return apps.size();
}
@Override
public Object getItem(int i) {
return apps.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView iv;
if(view == null){
iv = new ImageView(MainActivity.this);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
iv = (ImageView) view;
}
ResolveInfo info = apps.get(i);
iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return iv;
}
}
最后整个Activity的代码如下
[java] view
plain copy
print?
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private List<ResolveInfo> apps;
private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
new ImageView(MainActivity.this);
apps = getPackageManager().queryIntentActivities(mainIntent, 0);
}
public class AppsAdapter extends BaseAdapter {
public AppsAdapter(){
}
@Override
public int getCount() {
return apps.size();
}
@Override
public Object getItem(int i) {
return apps.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView iv;
if(view == null){
iv = new ImageView(MainActivity.this);
iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
iv.setLayoutParams(new GridView.LayoutParams(50, 50));
} else {
iv = (ImageView) view;
}
ResolveInfo info = apps.get(i);
iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return iv;
}
}
}
相关文章推荐
- 50 Android Hack 读书笔记
- Android基础类之BaseAdapter
- Android硬件访问服务框架分析
- android底层开发笔记(2)androidLK启动过程1
- MPchart使用详解及详细属性(一)
- Android 6.0 运行时权限处理完全解析
- Android中AlertDialog各种对话框的用法实例详解
- 《Android开发艺术探索》一书作者录制的Android视频
- android 测试
- android 页面跳转到上个页面后之后再返回,页面没变
- Android与H5的交互问题
- Android:打开相册(动态布局,Activity以dialog方式显示,图片压缩)
- Android打印框架Demo
- Android TextView(价格)文字底部或者中间 加横线
- 相对路径和绝对路径的理解以及android需要绝对路径的原因
- RelativeLayout控件之填满
- Android studio Invalid revision: 12.0.2753695 beta 1
- 监听滑动到底部的ScrollView
- android登陆的编写
- Android Studio Inotify Watches Limit