9

以下是我当前的 BottomNavigationView 的 XML。目前,所有三个图标可绘制对象都是相同颜色的未填充图标。我希望能够在选择该状态时呈现图标的填充版本,并可能更改颜色以使其明显是当前图标状态。下图是我的意思的一个例子。

所选状态的图标颜色更改示例

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_favorites"
        android:enabled="true"
        android:icon="@drawable/icon_flyer"
        android:title="Flyer"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_schedules"
        android:enabled="true"
        android:icon="@drawable/icon_list"
        android:title="List"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_music"
        android:enabled="true"
        android:icon="@drawable/icon_contact"
        android:title="Contact"
        app:showAsAction="ifRoom" />
</menu>
4

4 回答 4

10

要按状态更改图标颜色,您可以为 BottomNavigationView 中的“itemIconTint”属性设置可绘制的颜色状态。对于文本颜色,您可以在“itemTextColor”属性中设置相同的可绘制颜色状态。下面是 BottomNavigationView 的可绘制颜色状态示例:

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

“android:state_pressed”状态是菜单项的按下状态。“android:state_checked”是菜单项的选中状态。

这只会更改 BottomNavigationView 中图标和标签的颜色。为了填充您的图标,您可以为菜单项中的“图标”属性设置可绘制的图标状态。这是一个可绘制图标状态的示例:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_favorites_filled" android:state_checked="true" />
    <item android:drawable="@drawable/ic_favorites" />
</selector>
于 2017-06-27T09:14:03.160 回答
9

创造res/color/bottom_nav_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="your_highlight_color" />
    <item android:state_pressed="true" android:color="your_highlight_color" />
    <item android:color="your_inactive_color" />
</selector>

然后在您的底部导航视图中:

app:itemTextColor="@color/bottom_nav_color"
app:itemIconTint="@color/bottom_nav_color"
于 2018-08-21T02:53:45.340 回答
5

第 1 步:将所有图标添加到可绘制文件夹

第 2 步:为每个图标创建新的可绘制资源文件。在名为“bottom_navigation_icon”(例如)的文件中,指定选择器。默认图标需要在最后一行说明:

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

第 3 步:在底部导航菜单中,为每个项目设置以下代码:

android:icon="@drawable/bottom_navigation_icon"

就这样。现在,当您单击它时,您的图标会发生变化,当您单击离开时,它会变回上一个!

于 2018-04-19T21:49:00.807 回答
1

您可以将 StateDrawable 设置为您的菜单项。使用以下代码在您的可绘制文件夹中创建一个 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_pressed_green"
          android:state_pressed="true" />
    <item android:drawable="@drawable/button_normal" />
</selector>

更新符合您需要的 xml 文件(状态和可绘制)并在您的菜单项中引用它,而不是在当前图标中引用它。

于 2017-01-05T16:13:03.090 回答