2

我有一个 BottomNavigationView 并希望为选定和未选定状态都有自定义图标。尝试使用选择器但它不起作用。

知道如何放置自定义图标吗?

编辑- 将评论中的代码添加到问题中

<item 
    android:id="@+id/navigation_card" 
    android:icon="@drawable/iv_home_card" 
    app:itemBackground="@drawable/navigation_card" 
    app:showAsAction="ifRoom" tools:ignore="MenuTitle" 
/>

像这样我添加了图标。现在对于选定状态,它使用主题颜色对其进行描边,但我想用另一个图标替换该图标。

我尝试制作选择器但没有用

<selector 
    xmlns:android="schemas.android.com/apk/res/android"> 

    <item android:state_checked="false" 
        android:drawable="@drawable/btn_star_off_normal" /> 

    <item android:state_checked="true" 
        android:drawable="@drawable/btn_star_on_normal" /> 
</selector>
BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { 
    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
        switch (item.getItemId()) { } 
        return false; 
    } 
};
4

3 回答 3

8

You can simply create drawable selector in drawable folder and image can be change according to the state of the widget used in view

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

and set this selector in bottom nav menu file

<item
    android:id="@+id/navigation_home"
    android:icon="@drawable/nav_home_selector"
    android:title="@string/tab_home_title" />

Make sure to add this line to your java file. This solution will not work for selected icon unless you add this line.

bottomNavigationView.setItemIconTintList(null);

This will disable tint effect of selected item icon.

于 2020-04-27T02:08:29.557 回答
2

BottomNavigationView将从菜单文件中获取其图标,因此您无法从选择器可绘制对象中设置它们。但是,如果您想更改选定和未选定状态的颜色,您可以按如下方式执行此操作。

创建您的选择器可绘制nav_item_color_state如下

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

如下设置itemIconTintitemTextColor使用可绘制的选择器,它会在选择时更改图标和文本的颜色。

<android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:itemIconTint="@drawable/nav_item_color_state"
        app:itemTextColor="@drawable/nav_item_color_state"
app:menu="@menu/bottom_navigation_main" />

从这里检查文档

于 2018-12-05T09:29:24.850 回答
0

出于某种原因,“state_enabled”在我的情况下不起作用,所以我使用了下面给出的选择器。 nav_color_selector.xml

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

与 BottomNavigationView 一起作为

<com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        app:itemIconTint="@drawable/nav_color_selector"
        app:itemTextColor="@drawable/nav_color_selector"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />

此代码更改了我在 bottom_nav_menu.xml 中链接的矢量可绘制对象的填充颜色

于 2020-08-02T08:49:09.957 回答