【问题标题】:How to set NavigationView itemTextColor programmatically如何以编程方式设置 NavigationView itemTextColor
【发布时间】:2017-11-29 07:03:51
【问题描述】:

我正在以编程方式在导航视图中添加项目,但我必须以编程方式添加 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

【问题讨论】:

  • 您想将所有项目设置为相同颜色还是为不同项目设置不同颜色?
  • 当点击一个特定的项目时,它的颜色会发生变化并保持相同的颜色。例如:当用户打开抽屉并单击特定项目时,它会改变颜色并保持(相同颜色)另一个项目单击。
  • 您能否添加案例的图片或屏幕截图以及 onclick 部分的代码(如果您在某处给出)?点击前和点击后,预期颜色和实际颜色。
  • 我添加了截图
  • 使用这个............navigationView.setItemTextColor();

标签: android


【解决方案1】:

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

代码如下:

 // 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>

【讨论】:

    【解决方案2】:

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

    这里的 item 是你的 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);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2019-04-13
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多