这里的示例是获取系统可用的应用
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity" >
<SlidingDrawer
android:id="@+id/sd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:handle="@+id/handle"
android:content="@+id/content"
>
<ImageView
android:id="@id/handle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_allhide"
/>
<GridView
android:id="@id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="3"
></GridView>
</SlidingDrawer>
</LinearLayout>
在布局里注意的是SlidingDrawer要包括handle(把手)和content(内容)这两个属性,通过handle拖出内容,这里用imageview充当handle,gridview充当content
在MAinActivity里
public class MainActivity extends Activity {
private ImageView handle;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gv = (GridView) findViewById(R.id.content);
SlidingDrawer sd = (SlidingDrawer) findViewById(R.id.sd);
handle = (ImageView) findViewById(R.id.handle);
PackageManager pm = getPackageManager();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
//通过包资源管理器找到资源文件
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
List<AppInfos> appinfos = new ArrayList<AppInfos>();
for(ResolveInfo info:resolveInfos){
AppInfos appinfo = new AppInfos();
appinfo.name = info.loadLabel(pm).toString();//获取应用名
appinfo.icon = info.loadIcon(pm);//获取应用图标
//ComponentName(组件名称)是用来打开其他应用程序中的Activity或服务的
//和setclass()类似
String pkg = info.activityInfo.packageName;
String cls = info.activityInfo.name;
ComponentName component = new ComponentName(pkg, cls);
appinfo.component = component;
appinfos.add(appinfo);
}
adapter = new MyAdapter(appinfos);
gv.setAdapter(adapter);
sd.setOnDrawerOpenListener(new OnDrawerOpenListener() {
@Override
public void onDrawerOpened() {
handle.setImageResource(R.drawable.ic_launcher_allshow);
}
});
sd.setOnDrawerCloseListener(new OnDrawerCloseListener() {
@Override
public void onDrawerClosed() {
handle.setImageResource(R.drawable.ic_launcher_allhide);
}
});
gv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
AppInfos appInfo = (AppInfos) adapter.getItem(position);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setComponent(appInfo.component);
startActivity(intent);
}
});
}
public class MyAdapter extends BaseAdapter{
private List<AppInfos> appInfos;
public MyAdapter(List<AppInfos> appInfos) {
super();
this.appInfos = appInfos;
}
@Override
public int getCount() {
return appInfos.size();
}
@Override
public Object getItem(int position) {
return appInfos.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
ViewHolder holder = null;
if(convertView != null){
view = convertView;
holder = (ViewHolder) view.getTag();
}else{
view = getLayoutInflater().inflate(R.layout.item, null);
holder = new ViewHolder();
holder.iv_icon = (ImageView) view.findViewById(R.id.iv_icon);
holder.tv_name = (TextView) view.findViewById(R.id.tv_name);
view.setTag(holder);
}
AppInfos appinfo = appInfos.get(position);
holder.iv_icon.setImageDrawable(appinfo.icon);
holder.tv_name.setText(appinfo.name);
return view;
}
}
public class ViewHolder{
TextView tv_name;
ImageView iv_icon;
}
}
对象数据类
public class AppInfos {
public String name;
public Drawable icon;
public ComponentName component;//组件
}
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="名字"
/>
</LinearLayout>