替换导航查看项目涟漪效应
Replace Navigation View Item Ripple Effect
我正在尝试替换我认为是 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>
选中项目时,项目背景可绘制看起来很棒("Selection Controls" 是下图中选中的项目)。但是当项目被点击时(下面的 "Progress Indicators"),似乎默认的波纹可绘制对象 和 background_navigation_view_item.xml
可绘制对象都被使用了(只有一个圆角矩形应该被显示,而不是它周围的矩形)。
我还测试了可绘制对象作为可检查视图的背景,它的工作方式符合我的预期。因此,如果不是我的可绘制对象代码中的错误,为什么不替换原始背景可绘制对象?
我已经回答了这个问题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>
我正在尝试替换我认为是 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>
选中项目时,项目背景可绘制看起来很棒("Selection Controls" 是下图中选中的项目)。但是当项目被点击时(下面的 "Progress Indicators"),似乎默认的波纹可绘制对象 和 background_navigation_view_item.xml
可绘制对象都被使用了(只有一个圆角矩形应该被显示,而不是它周围的矩形)。
我还测试了可绘制对象作为可检查视图的背景,它的工作方式符合我的预期。因此,如果不是我的可绘制对象代码中的错误,为什么不替换原始背景可绘制对象?
我已经回答了这个问题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>