导航抽屉选择项目textColor由自定义适配器

问题描述 投票:1回答:3

我可以知道如何在导航抽屉中更改所选项目的文本颜色。

安装appcompat_v7 22.1.1后,listview的android:textColor无法正常工作,所以我想我无法使用选择器drawable进行更改。

我设法通过使用自定义适配器更改抽屉项目的默认颜色。

但是这只能在初始化时将第一个项目设置为绿色。

我可以知道如何在选择项目时将所选项目的颜色(onclick)更改为我想要的颜色。

适配器:

public class NavigationDrawerAdapter extends ArrayAdapter<String> {
    private int mSelectedItem;
    private final Context context;
    private String[] sections;

    public NavigationDrawerAdapter(Context context, int resource, String[] objects) {
        super(context, resource, objects);
        this.context = context;
        sections = objects;
    }
    public int getSelectedItem() {
        return mSelectedItem;
    }
    public void setSelectedItem(int selectedItem) {
        mSelectedItem = selectedItem;
    }

    private String getMenuItemTitle(int position) {
        if (position >= 0 && position <= sections.length)
            return sections[position];
        return "Invalid section requested";
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //Get item TextView
        TextView view = (TextView) super.getView(position, convertView, parent);

        view.setText(getMenuItemTitle(position));

        if (position == mSelectedItem) {
            view.setTextColor(getContext().getResources().getColor(R.color.green));
        } else {
            view.setTextColor(getContext().getResources().getColor(R.color.white));        }
        return view;
    }
}

导航抽屉:

mDrawerListView.setAdapter(new NavigationDrawerAdapter(
                getActionBar().getThemedContext(),
                android.R.layout.simple_list_item_activated_1,
                new String[]{
                        getString(R.string.title_home),
                        getString(R.string.title_stamp),
                        getString(R.string.title_scanner),
                        getString(R.string.title_setting),}) {

        });
        mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
        return mDrawerListView;
..
...
private void selectItem(int position) {
        mCurrentSelectedPosition = position;

        if (mDrawerListView != null) {
            mDrawerListView.setItemChecked(position, true);
        }
        if (mDrawerLayout != null) {
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }
        if (mCallbacks != null) {
            mCallbacks.onNavigationDrawerItemSelected(position);
        }
    }
android android-arrayadapter navigation-drawer textcolor
3个回答
3
投票

我找到了解决方案。

因为我已经扩展了适配器。当单击项目进行更改时,我只需要按位置调用和更改所选项目。

ListDrawer onItemClickListener:

 mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                selectItem(position);

                myadapter.setSelectedItem(position);

            }

并从自定义适配器:

public void setSelectedItem(int selectedItem) {
        mSelectedItem = selectedItem;
    }

    private String getMenuItemTitle(int position) {
        if (position >= 0 && position <= sections.length)
            return sections[position];
        return "Invalid section requested";
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //Get item TextView
      TextView view = (TextView) super.getView(position, convertView, parent);

        view.setText(getMenuItemTitle(position));

        if (position == mSelectedItem) {
            view.setTextColor(getContext().getResources().getColor(R.color.green));
        } else {
            view.setTextColor(getContext().getResources().getColor(R.color.normal));
        }

        return view;
    }

*适配器类是有问题的。

来源:samsaodev.com


2
投票

只需创建一个颜色状态列表资源See documentation here,而不是解析导航抽屉的所有项目

res / color文件夹中的drawer_text_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item 
     android:state_activated="false"
     android:color="@color/drawer_text_normal"/>
   <item
     android:state_pressed="true"
     android:color="@color/drawer_text_pressed"/>
   <item
     android:state_activated="true"
     android:color="@color/drawer_text_pressed"/>
</selector> 

然后在您的抽屉列表项中将TextView的文本颜色设置为:

<TextView
    android:id="@+id/drawerText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/drawer_text_selector" />

1
投票
final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            // Do something after some time
            for (int i = 0; i < recyclerViewDrawer1.getChildCount(); i++) {
                ImageView imageViewDrawerItemIcon = (ImageView) recyclerViewDrawer1
                        .getChildAt(i).findViewById(
                                R.id.imageViewDrawerItemIcon);
                TextView textViewDrawerItemTitle = (TextView) recyclerViewDrawer1
                        .getChildAt(i).findViewById(
                                R.id.textViewDrawerItemTitle);
                LinearLayout linearLayoutItem = (LinearLayout) recyclerViewDrawer1
                        .getChildAt(i).findViewById(R.id.linearLayoutItem);
                if (i == 0) {
                    imageViewDrawerItemIcon.setColorFilter(colorPrimary);

                    textViewDrawerItemTitle.setTextColor(colorPrimary);
                    linearLayoutItem
                            .setBackgroundColor(colorControlHighlight);
                } else {
                    imageViewDrawerItemIcon
                            .setColorFilter(textColorPrimary);

                    textViewDrawerItemTitle.setTextColor(textColorPrimary);
                    linearLayoutItem.setBackgroundColor(colorBackground);
                }
            }
        }
    }, 250);
© www.soinside.com 2019 - 2024. All rights reserved.