【问题标题】:BottomNavigationView Original icon colorBottomNavigationView 原图标颜色
【发布时间】:2017-06-13 08:05:04
【问题描述】:

我有我的 bottomNavigationView :

我添加了这个类以防止它执行 shiftMode :

public class BottomNavigationViewHelper {
    public static void disableShiftMode(BottomNavigationView view) {
        BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
        try {
            Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
            shiftingMode.setAccessible(true);
            shiftingMode.setBoolean(menuView, false);
            shiftingMode.setAccessible(false);
            for (int i = 0; i < menuView.getChildCount(); i++) {
                BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
                //noinspection RestrictedApi
                item.setShiftingMode(false);
                // set once again checked value, so view will be updated
                //noinspection RestrictedApi
                //item.setChecked(item.getItemData().isChecked());
            }
        } catch (NoSuchFieldException e) {
            Log.e("BNVHelper", "Unable to get shift mode field", e);
        } catch (IllegalAccessException e) {
            Log.e("BNVHelper", "Unable to change value of shift mode", e);
        }
    }

我只想在没有这个选择器的情况下显示原始图标颜色,我怎么能做到这一点?

我的导航 xml:

<android.support.design.widget.BottomNavigationView
        android:id="@+id/bottomNavigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:menu="@menu/my_navigation_item"
        android:layout_alignParentBottom="true"/>

【问题讨论】:

    标签: android android-menu android-bottom-nav-view


    【解决方案1】:

    你必须让你的项目图标色调列表null,你可以从你的 bootomNav 到达:

    bottomNavigationView.setItemIconTintList(null);
    

    【讨论】:

    • 感谢您的解决方案,它有效!我尝试在 XML 中添加:app:itemIconTint="@null",但它不起作用。
    • 救命!! :)
    • 为什么会这样?我认为我的 app:itemIconTint 可能是问题所在,但是当我从 XML 中省略该 attr 时,除非我也调用 setItemIconTintList(null),否则未选择的图标根本不会出现。调用 setItemIconTintList(null) 与根本不指定图标色调有何不同?
    【解决方案2】:

    当标签处于活动状态时,我们的用例是一个多色图标,而灰色则是灰色的图标。将itemIconTintList设置为null,使得在使用材质组件BottomNavigationView时,非活动选项卡图标与活动选项卡图标颜色相同。

    所以我们还必须这样做:

    menu_bottom_navigation.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/first_tab"
            android:enabled="true"
            android:icon="@drawable/ic_first_tab_selector"
            android:title="@string/first_tab_title"/>
        <item
            android:id="@+id/second_tab"
            android:enabled="true"
            android:icon="@drawable/ic_second_tab_selector"
            android:title="@string/second_tab_title"/>
    </menu>
    

    ic_first_tab_selector.xml:

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

    ic_first_tab_inactive.xml 是非活动图标的可绘制对象,ic_first_tab_active.xml 是活动图标的可绘制对象。

    【讨论】:

    • 谢谢,你为我节省了很多时间
    【解决方案3】:

    如果您使用 Kotlin,您会怎么做 从您的主活动中找到您的导航 ID,然后在您的 mainActivity onCreat 中使用此代码

     my_navigation_item.itemIconTintList = null
    

    【讨论】:

    【解决方案4】:

    您可以从xmlns:app="http://schemas.android.com/apk/res-auto" 使用app:itemIconTint

    例如

    <android.support.design.widget.BottomNavigationView
        //...
        app:itemIconTint="@color/gray_scale"
        //...
    />
    

    当你的drawables有不同的颜色时很方便

    【讨论】:

      【解决方案5】:

      接受的答案有效,但该方法现已弃用。

      启用原始图标颜色的新方法是:

      bottomNavigation.setForceTint(false);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-21
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        相关资源
        最近更新 更多