Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改导航抽屉列表文本颜色并添加图标_Android - Fatal编程技术网

Android 更改导航抽屉列表文本颜色并添加图标

Android 更改导航抽屉列表文本颜色并添加图标,android,Android,对于堆栈溢出这个问题,我没有找到任何好的答案。我使用的是Android Studio默认的导航抽屉布局。我试着从fragment_navigation.xml更改textView的颜色,但没用。我不知道如何在NavigationDrawerFragment.java中更改颜色。可能需要在下面的代码中进行一些编辑 mDrawerListView.setAdapter(new ArrayAdapter<String>( getActionBar().getTh

对于堆栈溢出这个问题,我没有找到任何好的答案。我使用的是Android Studio默认的导航抽屉布局。我试着从fragment_navigation.xml更改textView的颜色,但没用。我不知道如何在NavigationDrawerFragment.java中更改颜色。可能需要在下面的代码中进行一些编辑

  mDrawerListView.setAdapter(new ArrayAdapter<String>(
            getActionBar().getThemedContext(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1,
            new String[]{
                    getString(R.string.title_section1),
                    getString(R.string.title_section2),
                    getString(R.string.title_section3),
                    getString(R.string.title_section4),
                    getString(R.string.title_section5),
                    getString(R.string.title_section6)
            }));

    ViewGroup header = (ViewGroup) inflater.inflate(R.layout.headers, mDrawerListView,false);

    mDrawerListView.addHeaderView(header, null, false);
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
    return mDrawerListView;
}
mDrawerListView.setAdapter(新阵列适配器(
getActionBar().getThemedContext(),
android.R.layout.simple\u list\u item\u activated\u 1,
android.R.id.text1,
新字符串[]{
getString(R.string.title_第1节),
getString(R.string.title_第2节),
getString(R.string.title_第3节),
getString(R.string.title_第4节),
getString(R.string.title_第5节),
getString(R.string.title_第6节)
}));
视图组标题=(视图组)充气器。充气(R.layout.headers,mDrawerListView,false);
mDrawerListView.addHeaderView(header,null,false);
mDrawerListView.setItemChecked(mCurrentSelectedPosition,true);
返回mDrawerListView;
}

我也找不到任何关于在导航抽屉的列表中添加图标和文本的好教程。请帮我解决这个问题。

您需要做的就是创建一个自定义适配器,而不是在默认代码中使用ArrayAdapter

我刚刚得到一个简单的工作示例,它使用扩展ArrayAdapter的自定义适配器

首先,您需要自定义适配器中每一行的布局

nav_drawer_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/icon"
        android:paddingTop="20dp"
        android:layout_width="35dp"
        android:layout_height="55dp" />

    <TextView
        android:id="@+id/text"
        android:textStyle="bold"
        android:textColor="#ff69b4"
        android:paddingTop="25dp"
        android:layout_marginLeft="4dp"
        android:layout_width="wrap_content"
        android:layout_height="55dp" />

</LinearLayout>

然后,在NavigationDrawerFragment.java中定义自定义适配器,并使用该适配器而不是默认的ArrayAdapter:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    mDrawerListView = (ListView) inflater.inflate(
            R.layout.fragment_navigation_drawer, container, false);
    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            selectItem(position);
        }
    });


    //Use Custom Adapter instead:
    mDrawerListView.setAdapter(new CustomNavAdapter(
            NavigationDrawerFragment.this.getActivity(),
            new String[]{
                    getString(R.string.title_section1),
                    getString(R.string.title_section2),
                    getString(R.string.title_section3),
            },
            new Integer[]{
                    R.drawable.ic_launcher,
                    R.drawable.ic_launcher,
                    R.drawable.ic_launcher,
            }));

    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
    return mDrawerListView;
}


public class CustomNavAdapter extends ArrayAdapter<String> {
    private final Activity _context;
    private final String[] _text;
    private final Integer[] _imageId;

    public CustomNavAdapter(Activity context, String[] text, Integer[] imageId) {
        super(context, R.layout.nav_drawer_item, text);
        this._context = context;
        this._text = text;
        this._imageId = imageId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = _context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.nav_drawer_item, null, true);
        TextView txtTitle = (TextView) rowView.findViewById(R.id.text);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
        txtTitle.setText(_text[position]);
        imageView.setImageResource(_imageId[position]);

        return rowView;
    }

}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
mDrawerListView=(ListView)充气器。充气(
R.layout.fragment_导航_抽屉、容器、假);
mDrawerListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
选择项目(位置);
}
});
//请改用自定义适配器:
mDrawerListView.setAdapter(新的CustomNavAdapter(
NavigationDrawerFragment.this.getActivity(),
新字符串[]{
getString(R.string.title_第1节),
getString(R.string.title_第2节),
getString(R.string.title_第3节),
},
新整数[]{
R.drawable.ic_发射器,
R.drawable.ic_发射器,
R.drawable.ic_发射器,
}));
mDrawerListView.setItemChecked(mCurrentSelectedPosition,true);
返回mDrawerListView;
}
公共类CustomNavAdapter扩展了ArrayAdapter{
私人最终活动——背景;
私有最终字符串[]_文本;
私有最终整数[]_imageId;
公共CustomNavAdapter(活动上下文,字符串[]文本,整数[]图像ID){
超级(上下文、右布局、导航抽屉、项目、文本);
这._context=context;
这个。_text=文本;
这个。_imageId=imageId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气器=_context.getLayoutInflater();
视图行视图=充气机。充气(R.layout.nav\u抽屉\u项目,空,真);
TextView txtTitle=(TextView)rowView.findViewById(R.id.text);
ImageView ImageView=(ImageView)rowView.findViewById(R.id.icon);
setText(_text[position]);
setImageResource(_imageId[position]);
返回行视图;
}
}
结果:


谷歌最近刚刚在支持库的最新版本(22.2.0)中添加了一个NavigationView对象,您可能还想查看它


图标和文本显示在不同的行中。另外,如何为所选项目提供背景色?