对我来说更简单的解决方案是:
注意事项:此解决方案需要Android Studio提供的自动生成的导航抽屉活动。
类DrawerItem,CustomDrawerAdapter和布局custom_drawer_item.xml均取自本教程。
1.创建此类以包装自定义抽屉项:public class DrawerItem {
String ItemName;
int imgResID;
public DrawerItem(String itemName, int imgResID) {
super();
ItemName = itemName;
this.imgResID = imgResID;
}
public String getItemName() {
return ItemName;
}
public void setItemName(String itemName) {
ItemName = itemName;
}
public int getImgResID() {
return imgResID;
}
public void setImgResID(int imgResID) {
this.imgResID = imgResID;
}}
2.为抽屉项创建自定义布局(custom_drawer_item.xml):
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:id="@+id/itemLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:orientation="vertical"
android:layout_marginTop="0dp"
android:background="?android:attr/activatedBackgroundIndicator">
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="55dp">
android:id="@+id/drawer_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:id="@+id/drawer_itemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"/>
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="1dp"
android:layout_marginTop="1dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#DADADC">
3.创建自定义适配器:import java.util.List;import android.app.Activity;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class CustomDrawerAdapter extends ArrayAdapter {Context context;List drawerItemList;int layoutResID;public CustomDrawerAdapter(Context context, int layoutResourceID, List listItems) {
super(context, layoutResourceID, listItems);
this.context = context;
this.drawerItemList = listItems;
this.layoutResID = layoutResourceID;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
DrawerItemHolder drawerHolder;
View view = convertView;
if (view == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
drawerHolder = new DrawerItemHolder();
view = inflater.inflate(layoutResID, parent, false);
drawerHolder.ItemName = (TextView)view.findViewById(R.id.drawer_itemName);
drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon);
view.setTag(drawerHolder);
} else {
drawerHolder = (DrawerItemHolder) view.getTag();
}
DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position);
drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
dItem.getImgResID()));
drawerHolder.ItemName.setText(dItem.getItemName());
return view;}private static class DrawerItemHolder {
TextView ItemName;
ImageView icon;}}
4.在自动生成的NavigationDrawerFragment类onCreateView方法中,替换自动生成的适配器:ArrayList dataList = new ArrayList();dataList.add(new DrawerItem(getString(R.string.title_section1), R.drawable.ic_action_1));dataList.add(new DrawerItem(getString(R.string.title_section2), R.drawable.ic_action_2));dataList.add(new DrawerItem(getString(R.string.title_section3), R.drawable.ic_action_3));mDrawerListView.setAdapter(new CustomDrawerAdapter(
getActivity(),
R.layout.custom_drawer_item,
dataList));
请记住替换R.string.title_sectionN和R.drawable.ic_action_N您自己的资源。