您的位置:首页 > 移动开发 > Android开发

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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: