PAYATHON 2026

如何移除 BottomNavigationView 的默认粉色高亮?

技术老齐

如果粉色高亮是选中后一直留在图标背后的色块,可以在 BottomNavigationView 中添加:

app:itemActiveIndicatorStyle="@null"

这样会移除默认的选中指示器,并保留通过 app:itemBackground 设置的自定义背景。如果粉色只在按下时短暂出现,需要检查点击波纹,具体处理方式见后文。

为什么设置自定义背景后仍有高亮?

itemBackground 控制菜单项背景,选中指示器(active indicator)则有独立的样式配置,所以自定义背景和默认指示器可能同时显示。

Material 3 风格的导航栏包含选中指示器,颜色由主题样式决定,并不固定为粉色。相关属性见 Material Components 导航栏文档。

题目未提供截图、Material Components 版本和 BottomNavigationStyle 的定义,仅凭布局还无法确定粉色来自哪一层。

修改 XML 配置

在原有配置中加入 app:itemActiveIndicatorStyle="@null":

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_navigation"
    style="@style/BottomNavigationStyle"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="@drawable/bottom_nav_background"
    app:itemIconTint="@drawable/nav_item_color"
    app:itemTextColor="@drawable/nav_item_color"
    app:itemBackground="@drawable/nav_item_background"
    app:itemActiveIndicatorStyle="@null"
    app:labelVisibilityMode="labeled"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:menu="@menu/bottom_navigation" />

在支持该属性的实现中,组件初始化时会读取 itemActiveIndicatorStyle,只有读到非零的样式资源 ID 才会启用选中指示器。设为 @null 后,初始化时就不会启用它。具体逻辑见 NavigationBarView 源码。

也可以在现有的 BottomNavigationStyle 中添加:

<item name="itemActiveIndicatorStyle">@null</item>

样式中的属性名不带 app: 前缀,两种写法任选一种即可。

也可以通过 Kotlin 关闭

需要在运行时控制时,可在布局加载后调用:

val bottomNavigation =
    findViewById<BottomNavigationView>(R.id.bottom_navigation)

bottomNavigation.setItemActiveIndicatorEnabled(false)

BottomNavigationView 从 NavigationBarView 继承了这个方法,用来控制选中指示器的显示,见 API 文档。

关闭指示器后,菜单项仍可使用,选中状态也会保留,自定义背景仍可根据选中状态显示。

如果粉色只在点击时出现

按下时出现、松手后消失的效果通常是 ripple(点击波纹)。可以通过以下属性关闭组件提供的波纹:

app:itemRippleColor="@null"

波纹和选中指示器分别配置,关闭波纹不会移除持续显示的选中色块。题目中已经设置了 itemBackground,还需要检查 nav_item_background 本身是否包含 <ripple> 或按下状态的粉色背景。这类效果需要在对应的 drawable 中修改。波纹属性的含义见 导航栏文档。

注意事项

  • 如果无法识别 itemActiveIndicatorStyle 或 setItemActiveIndicatorEnabled,先核对项目使用的 Material Components 版本是否支持它们。
  • 移除指示器后仍有粉色时,检查 BottomNavigationStyle、nav_item_background 和运行时代码中的相关设置。
  • 如果变粉的是图标或文字,检查 nav_item_color 中对应状态的颜色。itemIconTint、itemTextColor 不控制指示器背景。

备注:内容仅供参考。