项目在android BottomNavigationView中选择了颜色

WPG*_*WPG 34 select android colors bottomnavigationview

我指的是这个.单击"计划"时出现"计划活动",但始终选择第一个项目颜色("收藏夹").它不会更改"收藏夹"项目颜色中的"计划"项目颜色.还有,第三项(音乐).我使用android:state_checked NOT android:state_enabled."如果使用startActivity,它不会从收藏夹项目颜色更改计划项目颜色.如果没有,它会改变颜色.如何解决这个颜色选择问题.

activity_main.xml中

app:itemIconTint="@drawable/nav_item_color_state"
app:itemTextColor="@drawable/nav_item_color_state"
app:menu="@menu/bottom_navigation_main"
Run Code Online (Sandbox Code Playgroud)

@绘制/ nav_item_color_state

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white" android:state_enabled="true" />
    <item android:color="@color/colorPrimaryDark" android:state_enabled="false" />
</selector>
Run Code Online (Sandbox Code Playgroud)

小智 108

在res中创建一个颜色目录并创建您的xml文件以自定义底部导航项

RES /颜色/ bottom_nav_color.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/your_color" />
     <item android:state_checked="false" android:color="@color/your_color"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

并在你的BottomNavigationView中将app:itemTextColor和app:itemIconTint值设置为@ color/bottom_nav_color

<android.support.design.widget.BottomNavigationView
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/main_navigation"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:background="@color/actionBarColor"
   app:menu="@menu/my_navigation_items"
   app:itemTextColor="@color/bottom_nav_color"
   app:itemIconTint="@color/bottom_nav_color"/>

Run Code Online (Sandbox Code Playgroud)

  • 你为我打开了一些 android 新功能。它是 hack 还是官方的 android sdk? (2认同)

小智 13

  1. 在 drawable 文件夹中创建一个名为 的 xml 文件navigation_view_colored.xml并将其放入其中:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="false" android:color="@color/gray" />
  <item android:state_checked="true" android:color="@color/blue" />
</selector>
Run Code Online (Sandbox Code Playgroud)
  1. 将您创建的 xml 添加到 app:itemIconTint
<com.google.android.material.bottomnavigation.BottomNavigationView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bottom_navigation"
    android:layout_alignParentBottom="true"
    app:itemIconTint="@drawable/navigation_view_colored"
    app:itemTextColor="@color/blue"
    app:menu="@menu/bottom_navigation"
    android:background="?android:attr/windowBackground"/>
Run Code Online (Sandbox Code Playgroud)


Bla*_*nka 6

在我的情况下,我使用了BottomNavigationBarEx插件。所以,我必须像下面这样做:

在我的res/layout/layout_navigation_view.xml中:

添加app:itemIconTint="@drawable/bottom_nav_colors"。因为,我只使用图标。因此,如果您有文字,请添加以下内容:app:itemTextColor="@drawable/bottom_nav_colors"也。

    <com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/bottomNavBar"
        android:background="@drawable/white_grey_border_top"
        app:itemIconTint="@drawable/bottom_nav_colors"
        app:menu="@menu/bottom_navigation_menu" />
Run Code Online (Sandbox Code Playgroud)

然后在res/drawable目录中(因为selectors 需要包含在drawableoranimatable目录中)添加selector(如其他人提到的):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:color="@color/grey" />
    <item android:state_checked="true" android:color="@color/blue" />
</selector>
Run Code Online (Sandbox Code Playgroud)

然后在res/values/colors.xml中添加您选择取消选择的颜色,例如:

<color name="grey">#bfbfbf</color>
<color name="blue">#3F51B5</color>
Run Code Online (Sandbox Code Playgroud)


moh*_*sen 6

只是改变theme

创建themes.xmlvalues,加入这种风格

<style name="BottomNavThem" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimaryRed</item>
</style>
Run Code Online (Sandbox Code Playgroud)

并设置为 BottomNavigationView

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottomNavigationView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:menu="@menu/main_navigation_menu"
    android:theme="@style/BottomNavThem"/>
Run Code Online (Sandbox Code Playgroud)


Ank*_*ist 5

这是你问题的简单解决方案

<android.support.design.widget.TabLayout
....
app:tabBackground="@drawable/tab_color_selector"
...
/>
Run Code Online (Sandbox Code Playgroud)

选择器res/drawable/tab_color_selector.xml:

 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/tab_background_selected" android:state_selected="true"/>
    <item android:drawable="@color/tab_background_unselected" android:state_checked="false"/>
 </selector>
Run Code Online (Sandbox Code Playgroud)

更新标签项选择器颜色您需要的颜色.


小智 1

您是否听说过 Roughike 的 BottomBar 包装项目,它使 BottomNavigationView 的使用更加容易?项目可以在这里找到。

我建议您使用这个最新且具有高水平贡献的项目。如果您参考使用此功能,您只需插入以下代码即可在单击选项卡时更改颜色并执行更多自定义操作:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
Tab tab = newTab().setIcon(new BitmapDrawable(getResources(), icon)));
tab.getIcon().setColorFilter(Color.parseColor("#7E7E7E"), PorterDuff.Mode.SRC_IN);

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                          @Override public void onTabSelected(TabLayout.Tab tab) {
                            if (tab != null && tab.getIcon() != null) {
                              tab.getIcon().clearColorFilter();
                              }
                          }
                          @Override public void onTabUnselected(TabLayout.Tab tab) {
                            if (tab != null && tab.getIcon() != null) {
                              tab.getIcon()
                                  .setColorFilter(Color.parseColor("#7E7E7E"),
                                      PorterDuff.Mode.SRC_IN);
                            }
                          }
                          @Override public void onTabReselected(TabLayout.Tab tab) {
                          }
                        });
                      }
                    }
                  });
Run Code Online (Sandbox Code Playgroud)

因此,基本上我在这里所做的就是为未选定的选项卡着色,#7E7E7E并清除选定选项卡的着色过滤器,以便它们以其图标的原始颜色显示。当然,你也可以选择其他颜色来填充,这取决于你。

希望这对您有帮助!

干杯,

伦克