【问题标题】:Replace Navigation View Item Ripple Effect替换导航视图项目波纹效果
【发布时间】:2019-03-15 13:56:27
【问题描述】:

我正在尝试替换我认为是NavigationView 的默认项目背景。所以我创建了一个drawable来替换背景并使用itemBackground属性应用它。

background_navigation_view_item.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/navigation_item_background_tint">
    <item android:id="@android:id/mask" android:top="4dp" android:bottom="4dp" android:left="8dp" android:right="8dp">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="3dp"/>
        </shape>
    </item>
    <item android:top="4dp" android:bottom="4dp" android:left="8dp" android:right="8dp">
        <selector>
            <item android:state_checked="true">
                <shape android:shape="rectangle">
                    <solid android:color="@color/navigation_item_background_tint"/>
                    <corners android:radius="3dp"/>
                </shape>
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="@android:color/transparent"/>
                    <corners android:radius="3dp"/>
                </shape>
            </item>
        </selector>
    </item>
</ripple>

当项目被选中时,项目背景可绘制看起来很棒(“选择控件”是下图中的选定项目)。但是,当单击该项目时(下面的“进度指示器”),似乎正在使用默认的波纹可绘制 和 background_navigation_view_item.xml 可绘制(只应显示圆角矩形,而不是矩形围绕它)。

我还测试了可绘制视图作为可检查视图的背景,它的工作方式符合我的预期。因此,如果我的可绘制对象的代码中没有错误,为什么不替换原始背景可绘制对象?

【问题讨论】:

    标签: android android-drawable navigation-drawer android-jetpack android-navigationview


    【解决方案1】:

    我已经回答了这个问题here

    注意: 这段代码只是去除了背景默认波纹的不透明度

    无论如何,我会在这里再次回答。

    假设您的 NavigationView 代码是:

    <com.google.android.material.navigation.NavigationView
    android:id="@+id/navigation_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:menu="@menu/your_menu"
    app:itemBackground="@drawable/background_navigation_view_item.xml"/>
    

    我所做的是,在 NavigationView 中添加了一个主题属性如下:

    android:theme="@style/NavigationItemNoRipple"
    

    在styles.xml:

    <style name="NavigationItemNoRipple">
        <item name="android:colorControlHighlight">@android:color/transparent</item>
    </style>
    

    【讨论】:

    • 除了?android:attr/colorControlHighlight是波纹颜色的自然选择;这将使固有的涟漪效应和自定义的涟漪效应都变得透明。幸运的是,一个简单的解决方案是为自定义效果使用另一种颜色,而不是依赖于colorControlHighlight。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多