【问题标题】:How to remove NavigationView item background如何删除 NavigationView 项目背景
【发布时间】:2019-06-26 07:56:31
【问题描述】:

这似乎对于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,所以我没有想法。

【问题讨论】:

  • 您已尝试在菜单项中设置 checkable=false。
  • 刚试过,可惜没有任何效果
  • 尝试设置 app:itemBackground="@android:color/transparent"
  • 即使是透明的,还是有原来的波纹

标签: android android-navigationview material-components-android material-components


【解决方案1】:

如果您想在项目背景中使用自定义形状,请不要使用 app:itemBackground 属性。

使用 app:itemShapeAppearanceOverlayapp: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

【讨论】:

  • 迟到的回复。我确实在github.com/material-components/material-components-android/… 看到了您的问题,但这似乎对我不起作用。这是否需要任何父主题?
  • 将此标记为修复,但真正的修复是通过 android:theme 将控件突出显示设置为透明,如 github 问题中所述
  • @AllanW 感谢您的反馈。我用我在问题中的解决方案更新了答案。
【解决方案2】:

你可以这样做:

 <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>

【讨论】:

  • 你基本上是在用你自己的布局重新实现一个导航视图吗?我想在理想情况下避免这种情况,因为我确信其他人已经使用它并创造了自己的涟漪
【解决方案3】:

你为什么不用你自己的drawable覆盖它呢?您可以使用自己的颜色和效果,甚至可以使用十六进制使波纹效果透明

#ffffffff

@android:color/transparent

【讨论】:

  • 这就是我试图用itemBackground 做的事情。 nav_item_background 是我自己的可绘制对象,如图所示。更改确实有效,但由于某种原因仍然存在原始背景
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
相关资源
最近更新 更多