Android Studio中如何修改系统/底部导航栏按钮的点击波纹效果颜色
修改Android导航栏按钮触摸波纹颜色的方案
方案一:全局修改波纹颜色(简单但影响所有控件)
如果接受整个App的控件波纹颜色统一改为黑色,直接在主题中配置:
- 在
res/values/colors.xml中定义所需颜色:
<color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color>
- 修改App主题(路径为
res/values/styles.xml或res/values-v27/styles.xml):
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <!-- 设置导航栏背景为白色 --> <item name="android:navigationBarColor">@color/white</item> <!-- API26+(含测试设备API27)专用:设置导航栏按钮波纹颜色 --> <item name="android:navigationBarColorControlHighlight">@color/black</item> <!-- 兼容API21-25:全局控件波纹颜色 --> <item name="android:colorControlHighlight">@color/black</item> </style>
方案二:仅修改导航栏按钮波纹(不影响其他控件)
如果只想单独调整导航栏按钮的波纹效果,不改变其他控件的样式,按以下步骤操作:
创建自定义波纹Drawable资源
- 针对API21+(含API27),在
res/drawable-v21/目录下创建nav_bar_item_ripple.xml:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/black"> <!-- 波纹颜色设为黑色 --> <item android:id="@android:id/mask"> <shape android:shape="rectangle"> <solid android:color="@color/black" /> </shape> </item> </ripple>- 针对API19-20,在
res/drawable/目录下创建同名的nav_bar_item_ripple.xml(用传统selector模拟按压效果):
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/black_20" /> <!-- 20%透明度的黑色,模拟波纹效果 --> </shape> </item> <item> <color android:color="@android:color/transparent" /> </item> </selector>- 在
res/values/colors.xml中补充颜色定义:
<color name="black">#FF000000</color> <color name="black_20">#33000000</color> <color name="white">#FFFFFFFF</color>- 针对API21+(含API27),在
配置导航栏按钮样式
在App主题中指定导航栏按钮使用自定义背景样式:<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <!-- 设置导航栏背景为白色 --> <item name="android:navigationBarColor">@color/white</item> <!-- 指定导航栏按钮样式 --> <item name="android:navigationBarButtonStyle">@style/CustomNavigationBarButton</item> </style> <!-- 自定义导航栏按钮样式 --> <style name="CustomNavigationBarButton" parent="@android:style/Widget.Material.Button.NavigationBar"> <item name="android:background">@drawable/nav_bar_item_ripple</item> </style>
注意事项
- 测试设备为API27(Oreo),上述两种方案均可正常生效。
- 若你指的是Toolbar的导航按钮(而非系统底部导航栏),只需将Toolbar导航按钮的背景设置为自定义波纹Drawable即可,逻辑一致。
内容的提问来源于stack exchange,提问作者Zeeshan Ali
相关产品推荐
相关产品推荐

