Android程序中通过编程设置底部导航栏中图标和文本的颜色失败。

huangapple go评论77阅读模式
英文:

Android set color of icon and text in bottomNavigationBar by program fails

问题

我创建了一个 XML 文件来控制我的底部导航栏,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_checked="true"
        android:color="@color/bottomNavigationBarCheckedNormal" />

    <item
        android:state_pressed="true"
        android:color="@color/bottomNavigationBarCheckedNormal" />

    <item
        android:color="@color/bottomNavigationBarUncheckedNormal" />
</selector>

在我的活动 XML 文件中设置后,它可以正常工作,如下所示:

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/activity_news_bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    app:menu="@menu/bottom_navigation_menu"
    app:itemIconTint="@drawable/custom_bottom_navigation_normal"
    app:itemTextColor="@drawable/custom_bottom_navigation_normal"
    app:labelVisibilityMode="labeled" />

但我想通过程序来更改它,所以我尝试了以下代码:

bottomNavigationView.setBackgroundColor(Color.parseColor(AppColor.bottomNavigationBarBackgroundColor));
bottomNavigationView.setItemIconTintList(ColorStateList.valueOf(R.drawable.custom_bottom_navigation_normal));
bottomNavigationView.setItemTextColor(ColorStateList.valueOf(R.drawable.custom_bottom_navigation_normal));

但是这并不起作用,选择和未选择时的图标和文本颜色没有区别,并且颜色也不是我设置的。你能告诉我如何修复这个问题吗?谢谢。

英文:

I create a xml file to control my bottomNavigation bar, like this:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&gt;
    &lt;item
        android:state_checked=&quot;true&quot;
        android:color=&quot;@color/bottomNavigationBarCheckedNormal&quot; /&gt;

    &lt;item
        android:state_pressed=&quot;true&quot;
        android:color=&quot;@color/bottomNavigationBarCheckedNormal&quot; /&gt;

    &lt;item
        android:color=&quot;@color/bottomNavigationBarUncheckedNormal&quot; /&gt;
&lt;/selector&gt;

It is works when I set this in my activity xml file, like this:

&lt;com.google.android.material.bottomnavigation.BottomNavigationView
    android:id=&quot;@+id/activity_news_bottom_navigation&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;50dp&quot;
    app:menu=&quot;@menu/bottom_navigation_menu&quot;
    app:itemIconTint=&quot;@drawable/custom_bottom_navigation_normal&quot;
    app:itemTextColor=&quot;@drawable/custom_bottom_navigation_normal&quot;
    app:labelVisibilityMode=&quot;labeled&quot; /&gt;

But I want to change this by program, so I try to use this:

bottomNavigationView.setBackgroundColor(Color.parseColor(AppColor.bottomNavigationBarBackgroundColor));
bottomNavigationView.setItemIconTintList(ColorStateList.valueOf(R.drawable.custom_bottom_navigation_normal));
bottomNavigationView.setItemTextColor(ColorStateList.valueOf(R.drawable.custom_bottom_navigation_normal));

But it is not work, icon and text color are not different when select and unselect, and the color is not I set. How can I fix it, thank you.

答案1

得分: 2

你应该使用:

bottomNavigationView.setItemTextColor(
      AppCompatResources.getColorStateList(this, R.drawable.custom_bottom_navigation_normal));

方法 valueOf

返回一个包含单一颜色的 ColorStateList。此值不可为 null。

英文:

You should use:

bottomNavigationView.setItemTextColor(
      AppCompatResources.getColorStateList(this,R.drawable.custom_bottom_navigation_normal));

The method valueOf:
>Returns A ColorStateList containing a single color. This value cannot be null.

huangapple
  • 本文由 发表于 2020年8月27日 18:27:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/63614032.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定