首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android关于BottomNavigationView效果实现指南

Android关于BottomNavigationView效果实现指南

作者头像
计蒙不吃鱼
发布2025-06-12 19:33:47
发布2025-06-12 19:33:47
33000
代码可运行
举报
文章被收录于专栏:Android开发Android开发
运行总次数:0
代码可运行

前言

好久不见,计蒙回来了,最近有粉丝投稿了几个关于BottomNavigationView的一些问题,今天发篇比较详细的文章总结一下,希望能够对你有所帮助。

提示:以下是本篇文章正文内容,下面案例可供参考

一、初识BottomNavigationView

在Android Studio创建新项目时,会有很多小伙伴在模块中选择此类型的Activity,如下

项目运行效果图如下:

二、BottomNavigationView中的颜色关键实现代码解析(举例)

是如何定义的颜色的。

关键代码如下(获取xml中的属性):

代码语言:javascript
代码运行次数:0
运行
复制
 ColorStateList backgroundTint =
        MaterialResources.getColorStateList(
            context, a, R.styleable.BottomNavigationView_backgroundTint);
    DrawableCompat.setTintList(getBackground().mutate(), backgroundTint);

    setLabelVisibilityMode(
        a.getInteger(
            R.styleable.BottomNavigationView_labelVisibilityMode,
            LabelVisibilityMode.LABEL_VISIBILITY_AUTO));
    setItemHorizontalTranslationEnabled(
        a.getBoolean(R.styleable.BottomNavigationView_itemHorizontalTranslationEnabled, true));

    int itemBackground = a.getResourceId(R.styleable.BottomNavigationView_itemBackground, 0);
    if (itemBackground != 0) {
      menuView.setItemBackgroundRes(itemBackground);
    } else {
      ColorStateList itemRippleColor =
          MaterialResources.getColorStateList(
              context, a, R.styleable.BottomNavigationView_itemRippleColor);
      setItemRippleColor(itemRippleColor);
    }

可以很明显的看到起到关键作用的是ColorStateList,而处理好这个传入的参数即可解决颜色问题。

三、开始解决问题

1.如何修改图标颜色

这里提供两种解决方式 xml中解决: 首先:新建一个selector_color文件,设置两种状态的颜色

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#63F7DE" android:state_checked="true"  />
    <item android:color="@android:color/black" android:state_checked="false"/>
</selector>

然后在BottomNavigationView中调用此文件

代码语言:javascript
代码运行次数:0
运行
复制
app:itemIconTint="@color/selector_color"

java文件中解决: 传入一个自定义的ColorStateList。 并将其以参数传入view中

代码语言:javascript
代码运行次数:0
运行
复制
navView.setItemIconTintList();

2.如何使图标点击颜色不改变

在java中调用其setItemIconTintList,传参为空即可

代码语言:javascript
代码运行次数:0
运行
复制
navView.setItemIconTintList(null);

3.如何使点击时字体不改变大小

在dimens文件中设置以下两个的值为同一大小即可

代码语言:javascript
代码运行次数:0
运行
复制
    //防止字体出现变大效果
    <dimen name="design_bottom_navigation_active_text_size">10dp</dimen>
    <dimen name="design_bottom_navigation_text_size">10dp</dimen>

4.当你的图标是多色系时

在java中调用其setItemIconTintList,传参为空

代码语言:javascript
代码运行次数:0
运行
复制
navView.setItemIconTintList(null);

然后设置图片状态的item中drawable的选择,举例如下

代码语言:javascript
代码运行次数:0
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_home_black_24dp" android:state_checked="true"  />
    <item android:drawable="@drawable/ic_home_black_false_24dp" android:state_checked="false"/>
</selector>

最后在menu中调用此文件即可。举例文件名为:ic_home

代码语言:javascript
代码运行次数:0
运行
复制
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_home"
        android:title="@string/title_home" />

    <item
        android:id="@+id/navigation_dashboard"
        android:icon="@drawable/ic_dashboard_black_24dp"
        android:title="@string/title_dashboard" />

    <item
        android:id="@+id/navigation_notifications"
        android:icon="@drawable/ic_notifications_black_24dp"
        android:title="@string/title_notifications" />

</menu>

为了节省时间,只修改了第一个,效果如下

5.不想要ActionBar

1.将xml中paddingTop这行删除

代码语言:javascript
代码运行次数:0
运行
复制
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">

2.在java中将以下这行删除

代码语言:javascript
代码运行次数:0
运行
复制
  NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

3.设置APP样式为NoActionBar

代码语言:javascript
代码运行次数:0
运行
复制
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

四、总结

如有其它问题,欢迎留言。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、初识BottomNavigationView
  • 二、BottomNavigationView中的颜色关键实现代码解析(举例)
    • 是如何定义的颜色的。
  • 三、开始解决问题
    • 1.如何修改图标颜色
    • 2.如何使图标点击颜色不改变
    • 3.如何使点击时字体不改变大小
    • 4.当你的图标是多色系时
    • 5.不想要ActionBar
  • 四、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档