自定义图标 - 底部导航视图

2 人关注

我有一个BottomNavigationView,想为选中和未选中的状态定制图标。我试着用选择器,但没有成功。

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

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

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; 
    
5 个评论
什么是不工作的,发布你所尝试的代码
<item android:id="@+id/navigation_card" android:icon="@drawable/iv_home_card" app:itemBackground="@drawable/navigation_card" app:showAsAction="ifRoom" tools:ignore="MenuTitle" /> Like this i have added the icon. Now for selected state, it stroke it with theme color but i want to replace the icon with another icon. @KaranMer
I tried making selector but did not working <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> @KaranMer
Did you set clicklistener to menu item?
yes BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId() ) { } return false; }; }. };
android
android-layout
bottomnavigationview
android-bottomnav
Anita
Anita
发布于 2018-12-04
3 个回答
user2881604
user2881604
发布于 2020-08-02
已采纳
0 人赞同

你可以简单地在drawable文件夹中创建drawable选择器,图像可以根据视图中使用的widget的状态来改变。

<?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"/>
    android:id="@+id/navigation_home"
    android:icon="@drawable/nav_home_selector"
    android:title="@string/tab_home_title" />

请确保在你的java文件中添加这一行。除非你添加这一行,否则这个解决方案对选定的图标不起作用。

bottomNavigationView.setItemIconTintList(null);

这将禁用所选项目图标的色调效果。

karan
karan
发布于 2020-08-02
0 人赞同

替换代码0】将从菜单文件中获得它的图标,所以你不能从你的选择器drawable中设置它们。然而,如果你想改变它们在选定和未选定状态下的颜色,你可以像下面这样做。

创建你的选择器可画性 导航_项目_颜色_状态 如下所示

<?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>

set itemIconTint and itemTextColor using selector drawable如下所示 and it will change color of your icon and text when selected.

<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" />

检查文件here

Mayank Khattar
Mayank Khattar
发布于 2020-08-02
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"