Android关于BottomNavigationView使用指南

目录
  • 前言
  • 一、初识BottomNavigationView
  • 二、BottomNavigationView中的颜色关键实现代码解析(举例)
  • 三、开始解决问题
    • 1.如何修改图标颜色
    • 2.如何使图标点击颜色不改变
    • 3.如何使点击时字体不改变大小
    • 4.当你的图标是多色系时
    • 5.不想要ActionBar
  • 四、总结

前言

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

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

一、初识BottomNavigationView

常用属性:

  • app:itemTextColor 文字的颜色,可以通过selector来控制选中和未选中的颜色
  • app:itemIconTint 图标的颜色,可以通过selector来控制选中和未选中的颜色
  • app:itemIconSize 图标大小,默认24dp
  • app:iteamBackground 背景颜色,默认是主题的颜色
  • app:itemRippleColor 点击后的水波纹颜色
  • app:itemTextAppearanceActive 设置选中时文字样式
  • app:itemTextAppearanceInactive 设置默认的文字样式
  • app:itemHorizontalTranslationEnabled 在label visibility 模式为selected时item水平方向移动
  • app:elevation 控制控件顶部的阴影
  • app:labelVisibilityMode 文字的显示模式
  • app:menu 指定菜单xml文件(文字和图片都写在这个里面)

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

项目运行效果图如下:

二、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);
    }

可以很明显的看到起到关键作用的是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>

然后在BottomNavigationView中调用此文件

app:itemIconTint="@color/selector_color"

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

navView.setItemIconTintList();

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

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

navView.setItemIconTintList(null);

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

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

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

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

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

navView.setItemIconTintList(null);

然后设置图片状态的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>

最后在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>

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

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">

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

NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

3.设置APP样式为NoActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

四、总结

到此这篇关于Android关于BottomNavigationView使用指南的文章就介绍到这了,更多相关Android BottomNavigationView内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android BottomNavigationView底部导航效果

    BottomNavigationView 很早之前就在 Material Design 中出现了,但是直到 Android Support Library 25 中才增加了 BottomNavigationView 控件.也就是说如果使用官方的BottomNavigationView控件必须让targetSdkVersion >= 25,这样才能引入25版本以上的兼容包. 接下来我们来看看如何使用BottomNavigationView. 使用BottomNavigationView 需要添加d

  • Android关于BottomNavigationView使用指南

    目录 前言 一.初识BottomNavigationView 二.BottomNavigationView中的颜色关键实现代码解析(举例) 三.开始解决问题 1.如何修改图标颜色 2.如何使图标点击颜色不改变 3.如何使点击时字体不改变大小 4.当你的图标是多色系时 5.不想要ActionBar 四.总结 前言 好久不见,计蒙回来了,最近有粉丝投稿了几个关于BottomNavigationView的一些问题,今天发篇比较详细的文章总结一下,希望能够对你有所帮助. 提示:以下是本篇文章正文内容,下

  • Android架构组件Room指南

    一.简介 Room是Google推出的Android架构组件库中的数据持久化组件库, 也可以说是在SQLite上实现的一套ORM解决方案. Room主要包含三个部分: Database : 持有DB和DAO Entity : 定义POJO类,即数据表结构 DAO(Data Access Objects) : 定义访问数据(增删改查)的接口 其关系如下图所示: Room Architecture Diagram 二.基本使用 1. 创建Entity 1.1 一个简单的Entitiy 一个简单Ent

  • Android Studio 代理配置指南(小结)

    Android Studio 用户的代理配置指南,真正有效的 gradle 代理配置方式.#依赖拉不下来真让人自闭,不想再一遍又一遍自闭了,所以记下来. IDE HTTP Proxy Windows 下 Ctrl + Alt + S ,然后输入 Proxy 能看到 HTTP Proxy  的设置项了,具体的路径是 Appearance & Behavior > System Settings > HTTP Proxy ,macOS 那边对应 Settings 的是 Preference

  • Android中viewPager使用指南

    viewPager是谷歌官方提供的一种方便实现页面滑动效果的控件,可以直接使用也可以和fragment联合使用.这里只简单说下直接使用.  使用viewPager的步骤如下: (1)在布局中放入viewPager的控件  (2)设置加载到viewPager中的view  (3)编写viewPager特有的adapter  (4)实例化viewPager并给他绑定上步设置的adapter 这个步骤体现的也是MVC思想,可以参考我之前的文章http://www.jb51.net/article/78

  • Android Menu详解及示例代码

    Android Menu 详细介绍: 1.选项菜单 OptionsMenu 2.上下文菜单 ContextMenu 3.子菜单 SubMenu 组成Android用户界面的除了View以外,还有菜单和对话框,这一讲我们就共同学习一下菜单的使用. 菜单是用户界面中最常见的元素,使用也非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu),下面分别举例说明. 一.选项菜单 OptionsMenu Andro

  • Android架构组件Room的使用详解

    Room其实就是一个orm,抽象了SQLite的使用,但是它作为Android的亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错的. Room有3个主要组件 Database :数据库 Entity : 代表数据库一个表结构 Dao : 包含访问数据库的方法 简单使用 添加Google Maven仓库 allprojects { repositories { jcenter() google() } } 添加依赖 dependencies { // Room i

  • Android Studio3.6新特性之视图绑定ViewBinding使用指南

    View Binding是一项功能,使您可以更轻松地编写与视图交互的代码.在模块中启用视图绑定后,它将为该模块中存在的每个XML布局文件生成一个绑定类.绑定类的实例包含对在相应布局中具有ID的所有视图的直接引用. 正文 Android Studio 3.6 Canary 11 及更高版本中推出了ViewBinding功能,ViewBinding将逐步替换掉findViewById,还等什么,抓紧时间学习吧! 谷歌官方文档的ViewBinding Demo是用Kotlin语言写的,看起来比较生疏,

  • 基于IntelliJ IDEA/Android Studio插件开发指南(推荐)

    目录 前言 插件开发的基本流程 1. 环境配置 1.1 安装PDK 1.2 配置插件开发SDK 2. 新建插件工程 3. Action 4. 配置描述 5. 调试.打包 业务实践 方案一:自建Diff工具 方案二:使用JGit 方案三:利用内存Git 为防止盗链,本文首发于于果的博客园,转载请注明出处!原文链接:https://www.cnblogs.com/yuxiuyan/p/14682460.html 前言 目前在为安卓手机QQ做自动化的相关工作,包括UI自动化,逻辑层自动化等.使用到的u

  • Android 蓝牙BLE开发完全指南

    目录  介绍 连接模式 GATT协议 使用过程 扫描 连接 设备连接 发现服务 数据传输 其他 断开连接 参考 总结  介绍 1.BLE 是 Bluetooth Low Energy 的缩写,意思为低功耗蓝牙.由蓝牙技术联盟(Bluetooth SIG)设计的无线通讯技术,主要用于医疗,健身,安全和家庭娱乐行业. 与传统蓝牙相比,蓝牙低功耗旨在大幅降低功耗和成本,同时也能够达到相同的通讯效果. 支持多个平台,包括 IOS,Android,Windows Phone 和 BlackBerry 以及

随机推荐