android - 替换导航查看项目涟漪效应

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

我正在尝试替换我认为是 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 可绘制对象(仅圆角矩形应该显示,而不是它周围的矩形)。

Navigation View Ripple Effect

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

最佳答案

我已经回答了这个问题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 - 替换导航查看项目涟漪效应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55184220/

相关文章:

android - 抽屉导航主要 Activity 内容

Android 使用设备艺术生成器进行屏幕截图

java - 在线程中运行函数或在函数中使用线程

android - 在 xml 中为按钮定义自定义形状。现在我想动态改变颜色。如何?

android - 抽屉导航始终可见(一点点)

android - 将抽屉导航的 ListView 更改为任何自定义 View (比如相对布局)?

android - 从调用 Activity 创建的对象中访问调用 Activity 的方法

android - 媒体记录器 : stop called in an invalid state: 1

android - 如何压缩使用 Glide 加载的可绘制图像

android - 将 android 矢量可绘制 XML 转换为 SVG