预备知识: GridView的使用 \ 改写BaseAdapter
列出已经安装的应用程序是作为launcher比不可少的功能。下面我们就讲解怎样将应用程序列出来。程序运行后的样子如下:
一. 修改main.xml,在其中添加一个GridView用来显示应用程序列表。
修改后如下:
二 . 通过PackageManager的api 查询已经安装的apk
三. 实现用于显示Gridview的Adapter,使其显示获得的应用程序列表
直接上代码:
列出已经安装的应用程序是作为launcher比不可少的功能。下面我们就讲解怎样将应用程序列出来。程序运行后的样子如下:
一. 修改main.xml,在其中添加一个GridView用来显示应用程序列表。
修改后如下:
- <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; 中,如下:
- 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,使其显示获得的应用程序列表
直接上代码:
- 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的代码如下
- 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;
- }
- }
- }