谷歌的导航抽屉NavigationView、DrawerLayout的去掉默认的图标颜色和选中颜色

谷歌的导航抽屉NavigationView、DrawerLayout的去掉默认的图标颜色和选中颜色

谷歌的抽屉导航还是挺好用的,但是总感觉封装过度了,很多东西不能改
能修改的东西也就这些,但是如果要修改更多似乎有点无能为力了

<attr name="android:background"/>
        <attr name="android:fitsSystemWindows"/>
        <attr name="android:maxWidth"/>
        <attr name="elevation"/>
        <attr name="menu" format="reference"/>
        <attr name="itemIconTint" format="color"/>
        <attr name="itemTextColor" format="color"/>
        <attr name="itemBackground" format="reference"/>
        <attr name="itemTextAppearance" format="reference"/>
        <attr name="headerLayout" format="reference"/>

不能修改图标的选中颜色或者默认颜色,甚至图标都不能正常显示
看了一下源代码:


        final ColorStateList itemIconTint;
        if (a.hasValue(android.support.design.R.styleable.NavigationView_itemIconTint)) {
            itemIconTint = a.getColorStateList(
                    android.support.design.R.styleable.NavigationView_itemIconTint);
        } else {
            itemIconTint = createDefaultColorStateList(android.R.attr.textColorSecondary);
        }

这里会根据主题和设置的颜色自动改变选中状态的颜色


还有一个问题,那就是使用menu菜单的话自定义程度也是很低的,比如我想要一个菜单包含一个组的名字,我又想把背景设置成黑色,这时候你发现改不了组的名称字体颜色

  <item
        android:id="@+id/nav_music_source"
        android:title="Music Source">
        <menu>
            <item
                android:id="@+id/nav_my_favorite"
                android:checkable="true"
                android:icon="@drawable/icon_drawer_menu_favorite"
                android:title="My Favorite">
            </item>
            <item
                android:id="@+id/nav_local_music"
                android:checkable="true"
                android:icon="@drawable/ic_drawer_collect"
                android:title="Local Music">
            </item>
            <item
                android:id="@+id/nav_xiami_music"
                android:checkable="true"
                android:icon="@drawable/icon_drawer_menu_xiami"
                android:title="Xiami FM"/>
            <item
                android:id="@+id/nav_ximalaya_fm"
                android:checkable="true"
                android:icon="@drawable/icon_drawer_menu_xmly"
                android:title="Ximalaya_FM"/>
            <item
                android:id="@+id/nav_spotify"
                android:checkable="true"
                android:icon="@mipmap/ic_launcher"
                android:title="Spotify"/>
        </menu>
    </item>

这个是菜单,如果主题设置成黑色背景,那么你会发现Music Source显示不了,因为都是黑色的.


第一个问题:要是我想修改默认的选中颜色或者我的图标怎样才能显示呢?怎么办呢?我的方法是重写NavigetionView,

if (a.hasValue(android.support.design.R.styleable.NavigationView_itemIconTint)) {
            itemIconTint = a.getColorStateList(
                    android.support.design.R.styleable.NavigationView_itemIconTint);
        } else {
            itemIconTint = createDefaultColorStateList(android.R.attr.textColorSecondary);
        }

把上面的代码和 mPresenter.setItemIconTintList(itemIconTint);注释掉
这样就能显示自己的图标了,想要让选中状态的图标和默认图标不同,可以使用select选择器,里面的属性用android:state_activated


第二个问题,那就是自定义菜单组,我的方法是用recycleview,当然Listview或者其他布局也可以
直接上代码吧


这里写图片描述


Demo下载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值