Android/Java开发中如何为Bottom Navigation View选中项添加边框
问题修正说明
你当前的实现逻辑存在错误:app:itemIconTint 属性仅用于调整图标的着色效果,无法承载背景边框的drawable资源,将边框drawable放在颜色选择器中的写法无法生效。
正确实现步骤
- 调整现有文件:
- 修改
rectangle.xml的圆角单位为dp,避免不同分辨率设备显示效果不一致:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/transparent"/> <corners android:radius="12dp"/> <stroke android:width="2dp" android:color="#000000"/> </shape>
- 新建导航项背景选择器
nav_item_background.xml,放在res/drawable目录下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 选中状态显示边框 --> <item android:state_checked="true" android:drawable="@drawable/rectangle" /> <!-- 未选中状态透明背景 --> <item android:drawable="@android:color/transparent" /> </selector>
- 修改
navbar_color.xml仅保留颜色控制逻辑,该文件为颜色选择器,放置drawable会导致逻辑错误:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="@color/你需要的选中状态颜色" /> <item android:color="@color/black" /> </selector>
- 修改BottomNavigationView布局配置,新增背景属性和内边距:
<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottomNavigationView" android:layout_width="match_parent" android:background="@color/yellowLanus" android:layout_height="wrap_content" android:paddingVertical="8dp" app:menu="@menu/bottom_menu" app:labelVisibilityMode="labeled" app:itemIconTint="@drawable/navbar_color" app:itemTextColor="@drawable/navbar_color" <!-- 新增选中背景配置 --> app:itemBackground="@drawable/nav_item_background" <!-- 高版本Material组件需要加这行避免背景被默认着色覆盖 --> app:itemBackgroundTint="@null" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" />
如果边框和图标间距不符合设计要求,可以在rectangle.xml的shape标签内增加padding属性调整内间距即可。
内容的提问来源于stack exchange,提问作者NikolaStan
相关产品推荐
相关产品推荐

