Android关于BottomNavigationView效果实现指南

简介: 本文详细介绍了Android中BottomNavigationView的实现与定制方法,涵盖颜色设置、图标修改、字体大小调整及多色图标处理等问题。通过XML和Java代码两种方式,解决图标颜色变化、点击效果等问题,并提供去除ActionBar的实现步骤。适合初学者及进阶开发者参考,助力打造更美观、功能丰富的底部导航栏。文末附源码,方便实践操作。

系列文章目录

Android关于BottomNavigationView效果实现指南

老规矩,文中/文末会放置源码

前言

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

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

一、初识BottomNavigationView

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

项目运行效果图如下:

2.gif

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

是如何定义的颜色的。

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

 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);
    }
AI 代码解读

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

三、开始解决问题

1.如何修改图标颜色

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

<?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>
AI 代码解读

然后在BottomNavigationView中调用此文件

app:itemIconTint="@color/selector_color"
AI 代码解读

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

navView.setItemIconTintList();
AI 代码解读

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

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

navView.setItemIconTintList(null);
AI 代码解读

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

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

    //防止字体出现变大效果
    <dimen name="design_bottom_navigation_active_text_size">10dp</dimen>
    <dimen name="design_bottom_navigation_text_size">10dp</dimen>
AI 代码解读

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

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

navView.setItemIconTintList(null);
AI 代码解读

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

<?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>
AI 代码解读

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

<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>
AI 代码解读

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

5.不想要ActionBar

1.将xml中paddingTop这行删除

<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">
AI 代码解读

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

  NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
AI 代码解读

3.设置APP样式为NoActionBar

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
AI 代码解读

四、总结

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

目录
打赏
0
30
28
0
100
分享
相关文章
Android Studio App开发之翻页视图ViewPager的讲解及实战(附源码 包括翻页视图和翻页标签栏)
Android Studio App开发之翻页视图ViewPager的讲解及实战(附源码 包括翻页视图和翻页标签栏)
1354 0
Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)
Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)
731 0
Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
1166 0
Android利用selector(选择器)实现图片动态点击效果
本文介绍了Android中ImageView的`src`与`background`属性的区别及应用,重点讲解如何通过设置背景选择器实现图片点击动态效果。`src`用于显示原图大小,不拉伸;`background`可随组件尺寸拉伸。通过创建`selector_setting.xml`,结合`setting_press.xml`和`setting_normal.xml`定义按下和正常状态的背景样式,提升用户体验。示例代码展示了具体实现步骤,包括XML配置和形状定义。
140 3
Android利用selector(选择器)实现图片动态点击效果
完美解决 fatal: unable to access ‘https://github.com/Homebrew/brew/‘
完美解决 fatal: unable to access ‘https://github.com/Homebrew/brew/‘
1816 0
Android中TextToSpeech的使用
本文介绍了在Android开发中使用TextToSpeech(TTS)实现语音合成的功能。通过实例代码展示了TTS的初始化、语言设置、语音播放及队列模式的选择,并提供了将语音保存为音频文件的方法。项目中包含一个简单的按钮触发朗读功能,适合初学者学习和实践。代码示例完整,涵盖Activity生命周期管理与XML布局设计。
293 4
旅行规划太难做?5 分钟构建智能Agent,集成地图 MCP Server
MCP(Model Coordination Protocol)是由Anthropic公司提出的开源协议,旨在通过标准化交互方式解决AI大模型与外部数据源、工具的集成难题。阿里云百炼平台上线了业界首个全生命周期MCP服务,大幅降低Agent开发门槛,实现5分钟快速搭建智能体应用。本文介绍基于百炼平台“模型即选即用+MCP服务”模式,详细展示了如何通过集成高德地图MCP Server为智能体添加地图信息与天气查询能力,构建全面的旅行规划助手。方案涵盖智能体创建、模型配置、指令与技能设置等步骤,并提供清理资源的指导以避免费用产生。
【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
1900 0
AS错误:Duplicate class kotlin.xxx.jdk8.DurationConversionsJDK8Kt found in modules kotlin-stdlib-1.8.22
本文描述了Android Studio中遇到的"Duplicate class found in modules"错误的解决方法,通过在`app/build.gradle`文件中使用`constraints`来排除过时的kotlin-stdlib-jdk7和kotlin-stdlib-jdk8依赖,解决了依赖冲突问题。
920 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问