Android 使用BottomNavigationView和Novigation组件实现底部导航功能

2023-05-16

在单activity多frament布局中,因为RadioGroup加FragmentManager比较灵活,以前我都是使用RadioGroup加FragmentManager实现底部导航栏,最近发现BottomNavigationView和Novigation实现底部导航栏的效果也不错,尤其是这样的写法很简便,就记录一下

话不多说直接上代码

1.activity_main布局


NavHostFragment 要导包哈,应该有提示可以自动导包,没有自己去找好了  

app:defaultNavHost="true" 这是拦截系统返回键的  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    tools:ignore="all">

    <fragment
        android:id="@+id/fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        app:defaultNavHost="true"
        app:navGraph="@navigation/mobile_navigation"  />

    <View
        android:layout_width="wrap_content"
        android:layout_height="1dp"
        android:background="@color/gary" /> 

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_nav"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:itemBackground="@color/white"
        app:itemIconTint="@drawable/main_bottom_navigation"
        app:itemTextColor="@drawable/main_bottom_navigation"
        app:menu="@menu/menu_navigation" /> 

</LinearLayout>

2.mobile_navigation布局

这里需要注意的是,这里的id要和menu里的id对应

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_nav"
    app:startDestination="@id/home_page">

    <fragment
        android:id="@+id/home_page"
        android:name="com.sxs.notes.fragment.FragmentHomePage"
        android:label="首页"
        tools:layout="@layout/fragment_home_page" />
    <fragment
        android:id="@+id/calendar"
        android:name="com.sxs.notes.fragment.FragmentCalendar"
        android:label="日历"
        tools:layout="@layout/fragment_calendar" />

    <fragment
        android:id="@+id/grouping"
        android:name="com.sxs.notes.fragment.FragmentGrouping"
        android:label="分组"
        tools:layout="@layout/fragment_grouping" />

    <fragment

        android:id="@+id/personal"
        android:name="com.sxs.notes.fragment.FragmentPersonal"
        android:label="个人中心"
        tools:layout="@layout/fragment_personal" />

</navigation>

3.main_bottom_navigation 

这里我直接用的纯黑,想要什么颜色自己设置就行了

app:itemBackground="@color/white"  背景色
app:itemIconTint="@drawable/main_bottom_navigation" 图标颜色
app:itemTextColor="@drawable/main_bottom_navigation" 文字颜色
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#000000" android:state_checked="true" />
    <item android:color="#000000" android:state_checked="false" />
</selector>

4.menu_navigation

看到了吧,要和mobile_navigation里的id对应,要不你点击没效果

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/home_page"
        android:checked="true"
        android:icon="@drawable/bg_home_page"
        android:title="" />
    <item
        android:id="@+id/calendar"
        android:icon="@drawable/bg_calendar"
        android:title="" />
    <item
        android:id="@+id/grouping"
        android:icon="@drawable/bg_grouping"
        android:title="" />
    <item
        android:id="@+id/personal"
        android:icon="@drawable/bg_personal"
        android:title="" />
</menu>

5.MainActivity代码

只需要三句话,这可比RadioGroup简单多了

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //实例化BottomNavigationView
        BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_nav);
        //获取NavController实例
        //NavController:负责操作Navigation框架下的Fragment的跳转与退出、动画、监听当前Fragment信息
        //这个R.id.fragment8就是Activity布局里fragment控件的id
        NavController controller = Navigation.findNavController(this, R.id.fragment);
        //在选择菜单时调用,当目的地更改时,BottomNavigationView中的选定项将自动更新
        NavigationUI.setupWithNavController(bottomNavigationView, controller);

    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 使用BottomNavigationView和Novigation组件实现底部导航功能 的相关文章

随机推荐

  • 手工搭建Servlet实现

    现在作为一个Java程序员 xff0c 我们已经习惯了使用IDE和Web框架进行开发 xff0c IDE帮助我们做了编译 打包的工作 Spring框架则帮助我们实现了Servlet接口 xff0c 并把Servlet容器注册到了Web容器中
  • airflow 文档学习(二) - 概念

    1 核心功能 1 1 DAGs 有向无环图 反映所涉及的task的依赖关系 注 xff1a 搜索dag的时候 xff0c airflow只会关注同事包含 34 DAG 34 和 34 airflow 34 字样的py文件 1 2 scope
  • java使用枚举进行前后端交互,以列表方式返回前端

    在有些情况下 xff0c 有一些下拉选择器的数据项 xff0c 我们采取了枚举的方式返回前端一个列表 xff0c 但是里面的东西多 xff0c 前端不想写死 xff0c 需要提供接口返回 xff0c 如下图类似这种 第一步 xff1a 先创
  • python循环,16段代码入门Python循环语句,值得收藏!

    导读 本文重点讲述for语句和while语句 for语句属于遍历循环 xff0c while语句属于当型循环 除了两个循环语句外 xff0c 还介绍了break continue与pass三个用于控制循环结构中的程序流向的语句 在此基础之上
  • IntelliJ IDEA中Error java: 程序包org.slf4j不存在 解决办法

    前言 问题描述 是我这边重构一个工程的时候新建一个module 希望这个module仅仅做kafka消费的服务 刚刚搭建起来运行发现有异常 Error nbsp java 程序包org slf4j不存在 解决办法 很显然可以想到的就是这个里
  • Linux下的Ubuntu系统下载安装python3.9.0

    在安装python3 9 0之前 xff0c 首先要进行换源 xff0c 这样才能防止下载过慢的情况 我这里换的是阿里云的镜像源 xff0c 在终端输入一下命令 其他镜像源可以查看 xff1a https www myfreax com u
  • 操作系统的基本概念

    操作系统的基本概念 一 操作系统的基本概念1 1概念1 2特征1 2 1 并发1 2 2 共享1 2 2 1 互斥共享方式1 2 2 2 同时访问方式 1 2 3 虚拟1 2 4 异步 1 3 目的和功能1 3 1操作系统作为计算机系统资源
  • Android -No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi

    1 原因分析 xff1a 最新版ndk xff08 version 61 25 1 8937393 xff09 的toolchains文件夹中无arm linux androideabi文件 2 解决方案 xff1a 同时安装低版本的ndk
  • Python中的函数

    一 前言 我们在写Python时 xff0c 经常需要用到函数 xff0c 在此来说一下函数 xff0c 也就是本章要介绍的函数的作用于使用步骤 文章内容有点长 xff0c 请耐心看完哦 xff0c 文末有惊喜 二 Python中函数的作用
  • Spring自学笔记(学完老杜视频后再进行修改)

    Spring 概念 Spring框架是一个储存对象的容器 xff0c 是一个轻量级的开源Java开发框架 xff0c 它的核心是控制反转 xff08 IoC xff09 和面向切面编程 xff08 AOP xff09 xff0c 它由20多
  • 5 个用于自动化的杀手级 Python 脚本

    Python 是一种功能强大的语言 xff0c 广泛用于自动执行各种任务 无论您是开发人员 系统管理员 xff0c 还是只是想通过自动化日常任务来节省时间的人 xff0c Python 都能满足您的需求 这里有 5 个 Python 脚本
  • 操作系统实验报告:生产者――消费者问题算法的实现

    生产者 消费者问题算法的实现 文章目录 生产者 消费者问题算法的实现实验内容1 问题描述 xff1a 2 功能要求 xff1a 背景知识1 xff0e 进程管理2 xff0e 信号量的有关知识 思路核心代码运行结果结论 实验内容 1 问题描
  • eslint 禁用命令

    eslint disable ESLint 在校验的时候就会跳过后面的代码 还可以在注释后加入详细规则 xff0c 这样就能避开指定的校验规则了 eslint disable no new 常用 xff1a 39 rules 39 34 c
  • Collections类(Java学习笔记)

    Collections 类是 Java 提供的一个操作 Set List 和 Map 等集合的工具类 Collections 类提供了许多操作集合的静态方法 xff0c 借助这些静态方法可以实现集合元素的排序 查找替换和复制等操作 下面介绍
  • 关于ubuntu中修改grub的一些操作

    电脑的型号 xff1a 联想小新pro14 ubuntu版本 xff1a ubuntu20 04 问题描述 xff1a 1 第一个问题 xff0c 在购买了联想小新后 xff0c 进入U盘的Ubuntu系统发现键盘失灵 xff0c 出现时灵
  • Selenium基础 — CSS选择器定位大全

    1 css属性定位 css选择器策略示例说明 id telA选择id 61 34 telA 34 的所有元素 class telA选择 class 61 34 telA 的所有元素 属性名 61 属性值 name 61 telA 除了id和
  • JavaScript — DOM的增删改查、节点、事件、文档的加载

    目录 一 DOM 二 节点 三 事件 四 文档的加载 五 DOM查询 1 获取元素节点 2 获取元素节点的子节点 3 获取父节点和兄弟节点 4 其他DOM查询的方法 常用搜索方法总结 xff1a 5 matches 与closest 六 D
  • 实验一:基于GUI的图像文件读写操作

    目录 一 实验目的及要求 xff1a 二 实验预习部分 三 实验内容及步骤 数字图像处理完整MATLAB代码在我的资源可以看到 xff0c 为方便下载 xff0c 下面是百度网盘资源 xff1a 链接 xff1a https pan bai
  • Arch Linux配置gnome桌面

    镜像下载 域名解析 时间同步请点击 阿里云开源镜像站 Arch Linux安装完gnome桌面后 xff0c 一般还需要配置好软件仓库环境 如AUR助手工具PARU xff0c 并需要进行进一步个性化配置 主题 扩展等 1 安装和使用PAR
  • Android 使用BottomNavigationView和Novigation组件实现底部导航功能

    在单activity多frament布局中 xff0c 因为RadioGroup加FragmentManager比较灵活 xff0c 以前我都是使用RadioGroup加FragmentManager实现底部导航栏 xff0c 最近发现Bo