如何以编程方式设置NavigationView itemTextColor

时间:2017-06-26 12:27:16

标签: android

我正在以编程方式在导航视图中添加项目,但我必须以编程方式添加itemTextColor

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    final Menu menu = navigationView.getMenu();
    for (int i = 1; i <= 3; i++) {
        menu.add("test" + i);
    }

点击特定项目时,它的颜色会发生变化并保持相同的颜色。例如:当用户打开抽屉并单击特定项目时,它会更改颜色并保持(相同颜色)另一个项目单击。

Check screenshot

2 个答案:

答案 0 :(得分:4)

我找到了动态数据添加和菜单项选择器的解决方案(在抽屉上单击)。

以下是代码:

 // MainActivity.java
 DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        final Menu menu = navigationView.getMenu();

        for (int i = 1; i <= 3; i++) {
            menu.add("Test " + i);
        }

 public boolean onNavigationItemSelected(MenuItem item) {

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        item.setCheckable(true);
        item.setChecked(true);
        item.setEnabled(true);
        return true;
    }

// Drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#097054" android:state_enabled="false" />
    <item android:color="#097054" android:state_checked="true" />
    <item android:color="#FFDE00" />
</selector>

// activity.xml

<android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#ffffff"
        android:fitsSystemWindows="true"
        app:itemBackground="@android:color/transparent"
        app:itemTextColor="@drawable/menu_text_color">


    </android.support.design.widget.NavigationView>

答案 1 :(得分:0)

您可以使用Spannable String更改NavigationView项目的颜色.. 我可以通过使用此代码来实现。

此处的项目是您的MenuItem。

SpannableString mNewTitle = new SpannableString(item.getTitle());
        mNewTitle.setSpan(new CustomTypefaceSpan("", font, 16), 0,
                mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        mNewTitle.setSpan(new RelativeSizeSpan(1.2f), 0, mNewTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        mNewTitle.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.light_grey)), 0, mNewTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        item.setTitle(mNewTitle);