【问题标题】:How do I make a single item in my NavigationDrawer have a different color of text?如何使 NavigationDrawer 中的单个项目具有不同颜色的文本?
【发布时间】:2021-10-01 05:06:43
【问题描述】:

通过在我的 Java 类中使用此代码 navigationView.setItemIconTintList(null);,我能够将紧急图标的颜色更改为红色。我也希望能够使图标变为红色,但我似乎无法找到一种方法来做到这一点。这是picture 如您所见,图标已经是红色,但文本不是。如何将“紧急呼叫”一词从黑色更改为红色?

这是我的 Themes.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.Flash" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
       
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
       

    </style>

    <style name="Theme.Flash.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="TextAppearance44">
        <item name="android:textColor">@color/red</item>
    </style>

    <style name="Theme.Flash.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="Theme.Flash.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

这是我使用导航抽屉的 Java 类

hamburgerMenuButton = findViewById(R.id.hamburgerMenuIcon);
        hamburgerMenuButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               drawerLayout.openDrawer(GravityCompat.END);
            }
        });

        navigationView.bringToFront();
        ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(Location.this, drawerLayout,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        actionBarDrawerToggle.setDrawerIndicatorEnabled(false);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
        navigationView.setNavigationItemSelectedListener(Location.this);
        navigationView.setItemIconTintList(null);

        MenuItem menuItem = menu.findItem(R.id.emergencyCallNavigationDrawer);
        SpannableString s = new SpannableString(menuItem.getTitle());
        s.setSpan(new TextAppearanceSpan(this, R.style.TextAppearance44), 0, s.length(), 0);
        menuItem.setTitle(s);

更新这是我的代码发生的情况

Here is what happend to my code

【问题讨论】:

标签: android android-studio android-layout


【解决方案1】:

您可以获取菜单项,然后使用所需颜色设置可扩展文本来实现此目的。
这就是我实现这一目标的方式:

菜单项

Menu menu = navView.getMenu();
MenuItem menuItem = menu.findItem(id);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new TextAppearanceSpan(this, R.style.TextAppearance44), 0, s.length(), 0);
menuItem.setTitle(s);

TextAppearance44

<style name="TextAppearance44">
    <item name="android:textColor">@color/colorTextView</item>
    <item name="android:textSize">@dimen/text_size_20sp</item>
</style>

【讨论】:

  • 你从哪里得到 menu.findItem?我是否将标题名称的 id 放在(id)中?对不起,我是 Android Studio 的新手
  • R.id.emergencyCallNavigationDrawer ,应该可以工作
  • .menu 怎么样?我该如何解决这个问题?
  • 我会编辑这个问题,这样你就可以看到我做了什么
  • Menu menu = navView.getMenu(); ,我已经在代码中更新了这个
猜你喜欢
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多