如何删除 NavigationView 项目背景
How to remove NavigationView item background
这似乎对于 itemBackground
属性来说应该是微不足道的,但由于某种原因,它不起作用。
如下图,我可以成功添加自己的背景(蓝色),但原来的波纹(灰色矩形)仍然可见。
将 itemBackground
设置为 null
似乎也不起作用。
我的导航视图:
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
style="@style/Widget.MaterialComponents.NavigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:itemBackground="@drawable/nav_item_background"
app:menu="@menu/main_drawer" />
(从生成的视图来看基本上未修改样式)
我的涟漪:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/accent_ripple">
<item
android:id="@android:id/mask"
android:right="8dp">
<shape android:shape="rectangle">
<corners
android:bottomRightRadius="50dp"
android:topRightRadius="50dp" />
<solid android:color="#fff" />
</shape>
</item>
</ripple>
我的应用主题也扩展了 Theme.MaterialComponents
,所以我没主意了。
你可以这样做:
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="230dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/colorPrimaryDark">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/layout_navigation_header" />
<include layout="@layout/layout_navigation" />
</LinearLayout>
</com.google.android.material.navigation.NavigationView>
你为什么不用自己的可绘制对象覆盖它?您可以使用自己的颜色和效果,甚至可以使用 hex
使波纹效果透明
#ffffffff
或
@android:color/transparent
如果您想在项目背景中使用自定义形状,请不要使用 app:itemBackground
属性。
使用 app:itemShapeAppearanceOverlay
和 app:itemShapeFillColor
属性:
<com.google.android.material.navigation.NavigationView
app:itemShapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Item"
app:itemShapeFillColor="@color/nav_item_shape_fill"
android:theme="@style/ThemeOverlay.NavigationView"
../>
其中:
<style name="ShapeAppearanceOverlay.Item" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopRight">16dp</item>
<item name="cornerSizeBottomRight">16dp</item>
<item name="cornerSizeBottomLeft">0dp</item>
<item name="cornerSizeTopLeft">0dp</item>
</style>
颜色选择器类似于:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.12" android:color="?attr/colorPrimary" android:state_activated="true"/>
<item android:alpha="0.12" android:color="?attr/colorPrimary" android:state_checked="true"/>
<item android:color="@android:color/transparent"/>
</selector>
目前没有办法去除项目中形状外的波纹。
但是,您可以使用 android:theme
覆盖波纹使用的颜色。
<style name="ThemeOverlay.NavItem.Ripple" parent="">
<item name="android:colorControlHighlight">@android:color/transparent</item>
</style>
检查此 issue for updates。
这似乎对于 itemBackground
属性来说应该是微不足道的,但由于某种原因,它不起作用。
如下图,我可以成功添加自己的背景(蓝色),但原来的波纹(灰色矩形)仍然可见。
将 itemBackground
设置为 null
似乎也不起作用。
我的导航视图:
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
style="@style/Widget.MaterialComponents.NavigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:itemBackground="@drawable/nav_item_background"
app:menu="@menu/main_drawer" />
(从生成的视图来看基本上未修改样式)
我的涟漪:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/accent_ripple">
<item
android:id="@android:id/mask"
android:right="8dp">
<shape android:shape="rectangle">
<corners
android:bottomRightRadius="50dp"
android:topRightRadius="50dp" />
<solid android:color="#fff" />
</shape>
</item>
</ripple>
我的应用主题也扩展了 Theme.MaterialComponents
,所以我没主意了。
你可以这样做:
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="230dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/colorPrimaryDark">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/layout_navigation_header" />
<include layout="@layout/layout_navigation" />
</LinearLayout>
</com.google.android.material.navigation.NavigationView>
你为什么不用自己的可绘制对象覆盖它?您可以使用自己的颜色和效果,甚至可以使用 hex
使波纹效果透明#ffffffff
或
@android:color/transparent
如果您想在项目背景中使用自定义形状,请不要使用 app:itemBackground
属性。
使用 app:itemShapeAppearanceOverlay
和 app:itemShapeFillColor
属性:
<com.google.android.material.navigation.NavigationView
app:itemShapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Item"
app:itemShapeFillColor="@color/nav_item_shape_fill"
android:theme="@style/ThemeOverlay.NavigationView"
../>
其中:
<style name="ShapeAppearanceOverlay.Item" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopRight">16dp</item>
<item name="cornerSizeBottomRight">16dp</item>
<item name="cornerSizeBottomLeft">0dp</item>
<item name="cornerSizeTopLeft">0dp</item>
</style>
颜色选择器类似于:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.12" android:color="?attr/colorPrimary" android:state_activated="true"/>
<item android:alpha="0.12" android:color="?attr/colorPrimary" android:state_checked="true"/>
<item android:color="@android:color/transparent"/>
</selector>
目前没有办法去除项目中形状外的波纹。
但是,您可以使用 android:theme
覆盖波纹使用的颜色。
<style name="ThemeOverlay.NavItem.Ripple" parent="">
<item name="android:colorControlHighlight">@android:color/transparent</item>
</style>
检查此 issue for updates。