替换导航查看项目的波纹效果

时间:2019-03-15 13:56:28

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

我正在尝试替换我认为NavigationView的默认项目背景的内容。因此,我创建了一个可替换背景的可绘制对象,并使用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可绘制对象(仅应显示一个圆角矩形,而不能显示围绕它的矩形)。

Navigation View Ripple Effect

我也将可绘制对象作为可检查视图的背景进行了测试,它以我期望的方式工作。因此,如果我的drawable代码没有错误,为什么不替换原始背景drawable?

1 个答案:

答案 0 :(得分: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>