【Android】底部导航栏【BottomNavigationView】+【ViewPage2】

这篇具有很好参考价值的文章主要介绍了【Android】底部导航栏【BottomNavigationView】+【ViewPage2】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题需求

实现底部导航栏切换
【Android】底部导航栏【BottomNavigationView】+【ViewPage2】

问题解决

最简单的实现方式就是使用系统自动生成的模板页面,但是有时候会有一些问题,特别是需要去除【ActionBar】的情况下,这种情况下使用系统的模板页面就不好用了,此时可以使用下面这种解决方式。

【BottomNavigationView】+【ViewPage2】
1.在res目录下创建【menu】目录,下面创建文件【bottom_nav_menu】

【Android】底部导航栏【BottomNavigationView】+【ViewPage2】

bottom_nav_menu代码
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/bottom_home_select"
        android:title="预览" />

    <item
        android:id="@+id/navigation_statistics"
        android:icon="@drawable/bottom_statis_select"
        android:title="统计" />

    <item
        android:id="@+id/navigation_notifications"
        android:icon="@drawable/bottom_notif_select"
        android:title="通知" />

    <item android:id="@+id/navigation_myset"
        android:icon="@drawable/bottom_myset_select"
        android:title="设置"/>
</menu>
2.设置自定义导航图标切换显示效果

本文中需要显示四个图标,所以需要做四个选择切换背景
【Android】底部导航栏【BottomNavigationView】+【ViewPage2】
其中这四个切换背景设置是一样的,这里就贴一个出来
【bottom_home_select】的代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_home_select" android:state_selected="true" />
    <item android:drawable="@drawable/ic_home" android:state_selected="false" />
</selector>

然后这些切换效果添加在第一步中的【bottom_nav_menu】代码中

3.自定义文字切换颜色效果

一般来说,文字切换效果的颜色是和图标颜色切换颜色是对应的
【Android】底部导航栏【BottomNavigationView】+【ViewPage2】
这个【color】一般是需要我们自己创建文件夹,在文件夹中创建文件【nav_bottom_txt_select】
代码展示

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#4878E3" android:state_selected="true" />
    <item android:color="#B6B6B6" android:state_selected="false" />
</selector>
4.依赖导入

【BottomNavigationView】是Android Studio自带就有,但是【ViewPage2】需要我们进行依赖导入,而【ViewPage2】又依赖【Recyclerview】,所以需要导入这两个依赖。

implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
5.【Activity】页面布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="#ffffff"
        //导航页面底部文字选择切换效果
        app:itemTextColor="@color/nav_bottom_txt_select"
        //文字显示模式(下面讲述)
        app:labelVisibilityMode="labeled"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        //添加我们前面设置的menu
        app:menu="@menu/bottom_nav_menu" />

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/nav_viewpage2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
6.【Fragment】页面创建

我们底部栏有四个按钮,所以我们需要创建四个【Fragment】,所以我们这边会有四个【Fragment】页面,再次不再叙述。
【Android】底部导航栏【BottomNavigationView】+【ViewPage2】
创建四个【Fragment】页面,分别命名【HomeFragment】、【StatisticsFragment】、【NotificationsFragment】、【MySetFragment】(里面什么都没有,就是一个空页面)。

7.创建ViewPage2的适配器

因为ViewPage2是依赖RecyclerView实现的,所以需要像使用Recyclerview一样创建一个适配器
【Java】版本

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import java.util.List;

/**
 * 作者 ldd
 * 日期 2023/2/7
 */
public class ViewPageAdapter extends FragmentStateAdapter {

    private List<Fragment> list;

    public ViewPageAdapter(@NonNull FragmentActivity fragmentActivity,
     List<Fragment> fragmentList) {
        super(fragmentActivity);
        list = fragmentList;
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return list.get(position);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}

【Kotlin】版本

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter

/**
 * 作者 ldd
 * 日期 2023/2/7
 */
open class ViewPager2Adapter(
    fa: FragmentActivity,
    private val list: MutableList<Fragment>
) : FragmentStateAdapter(fa) {

    override fun getItemCount(): Int {
        return list.size
    }

    override fun createFragment(position: Int): Fragment {
        return list[position]
    }
    
}

下面使用的是【Kotlin】版本的

8.【Activity】代码

首先要去除系统主题的颜色,换成我们自定义的

//去除自带的选中颜色,去除后文字和图片选择效果就是跟我们自定义的效果一样
binding.navView.itemIconTintList = null
//将所有的【Fragment】添加到【ViewPager2】中
val fragmentList: MutableList<Fragment> = ArrayList()
fragmentList.add(HomeFragment())
fragmentList.add(StatisticsFragment())
fragmentList.add(NotificationsFragment())
fragmentList.add(MySetFragment())
binding.navViewpage2.adapter = ViewPager2Adapter(this, fragmentList)

//当viewpage2页面切换时nav导航图标也跟着切换
binding.navViewpage2.registerOnPageChangeCallback(object :
    ViewPager2.OnPageChangeCallback() {
    override fun onPageSelected(position: Int) {
       super.onPageSelected(position)
       binding.navView.menu.getItem(position).isChecked = true
    }
})

//当nav导航点击切换时,viewpager2也跟着切换页面
binding.navView.setOnItemSelectedListener { item ->
     when (item.itemId) {
         R.id.navigation_home -> {
            binding.navViewpage2.currentItem = 0
            return@setOnItemSelectedListener true
         }
         R.id.navigation_statistics -> {
            binding.navViewpage2.currentItem = 1
            return@setOnItemSelectedListener true
         }
         R.id.navigation_notifications -> {
            binding.navViewpage2.currentItem = 2
            return@setOnItemSelectedListener true
         }
         R.id.navigation_myset -> {
             binding.navViewpage2.currentItem = 3
             return@setOnItemSelectedListener true
         }
    }
    false
}

此时底部导航栏已经实现。

追加

在设置bottomNavigationView的布局文件时,有个属性【labelVisibilityMode】
此属性有四个值
【Android】底部导航栏【BottomNavigationView】+【ViewPage2】
显示效果
【Android】底部导航栏【BottomNavigationView】+【ViewPage2】

小红点(角标)

【BottomNavigationView】自带此功能
当设置

var bride = binding.navView.getOrCreateBadge(R.id.navigation_notifications)

【Android】底部导航栏【BottomNavigationView】+【ViewPage2】

此时导航栏对应的item位置会显示小红点
如果给bride设置一个值

 bride.number = 15

【Android】底部导航栏【BottomNavigationView】+【ViewPage2】

属性

backgroundColor :设置角标背景色
badgeGravity :设置角标的显示位置
TOP_START,
TOP_END,
BOTTOM_START,
BOTTOM_END

badgeTextColor:设置角标显示的数字颜色
maxCharacterCount:最多显示几位数字
如果设置为2,number设置为15
【Android】底部导航栏【BottomNavigationView】+【ViewPage2】文章来源地址https://www.toymoban.com/news/detail-416992.html

到了这里,关于【Android】底部导航栏【BottomNavigationView】+【ViewPage2】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android studio中使用ViewPager和BottomNavigationView实现底部导航栏和碎片的同步切换

    通过几次的踩雷和摸索,完成了以上的操作,本教程写的详细全面,包教包会,对新手有好,看了不会的联系我,我倒立洗头给你看。 所需控件: fragment 作为Android中最常用的控件,它有自己的声明周期,可以粗略地等比为能够分屏的activity,但是和activity有区别,fragment有自

    2024年02月08日
    浏览(36)
  • Android——viewpage2+tablayout+fragment动态添加删除

    一、简介: 1、添加和删除按钮可动态添加删减tab页面 2、获取每个fragment数据页上的数据 3、为每个数据页赋值 二、 效果图: 三、实现: 主要功能实现:( ViewPage2Fragment.java ) 先初始化适配器 frament数据页(ViewPage2DataFragment.java) 适配器(FragmentStateViewPager2Adapter.java) 主布

    2024年02月16日
    浏览(34)
  • android中实现底部导航栏

            底部导航栏在app应用中是十分常见了,大部分的安卓应用中也都实现了底部导航栏的功能,这里我就以我以前做的一个简单小说阅读软件为例,为大家演示一下底部导航栏的使用,需要的朋友直接复制代码过去改写就行了。         这里包含了一些进行操作实际

    2024年02月19日
    浏览(31)
  • Android BottomNavigation底部导航栏使用

    原文地址: Android BottomNavigation底部导航栏使用 - Stars-One的杂货小窝 本文侧重点记录一些特殊的样式设置,所以基本使用这里就简单概述一下,详细图文可以去找其他人的博文 1.创建对应的menu菜单文件 2.xml布局引用menu菜单 3.启动Activity预览效果 可以使用 setOnItemSelectedListener 方法监

    2024年02月12日
    浏览(34)
  • Android---DslTabLayout实现底部导航栏

    1. 在 Android 项目中引用 JitPack 库  AGP 8.+ 根目录的 settings.gradle  AGP 8.+ 根目录如果是  settings.gradle.kts 文件  AGP 8.- 根目录的 build.gradle 2. 添加依赖  在APP目录中的 build.gradle 3. 布局 activity_main.xml 4. 底部 tab_item.xml 布局 5. 每个底部 tab 对应的 fragment a. DiscoveryFragment b. fragment_dis

    2024年02月20日
    浏览(28)
  • Android实现底部导航栏方法(Navigation篇)

    底部导航栏一直是大部分App不可缺失的一部分 最近注意到Jetpack中的Navigation支持Fragment的切换操作 特此浅研究一下 选择性跳过 此处使用Google开发者文档中介绍 使用nav文件配合 FragmentContainerView组件 实现Fragment的切换操作 创建nav文件 导入后,在项目的res文件夹下,右键选择

    2024年02月06日
    浏览(78)
  • Flutter写一个android底部导航栏框架

    废话不多说,上代码: 在上述示例中,我们创建了一个 MyHomePage 小部件,它是 StatefulWidget 。 MyHomePage 包含底部导航栏和相关页面内容。通过 BottomNavigationBar 和 currentIndex 属性,我们可以控制当前选中的导航项并在 onTap 回调中更新状态。 在 items 属性中,我们设置了三个 Bott

    2024年02月14日
    浏览(27)
  • Android开发:利用Android Studio自带的底部导航栏和ViewPager+TabLayout创建顶部导航栏

    目录 效果图 底部导航栏 ​编辑 顶部导航栏 底部导航栏首个Fragment代码 适配器代码 顶部导航栏首个Fragment代码  顶部导航栏另外三个Fragment代码  ​编辑 顶部导航栏四个Fragment的XML 补充 学Android开发开始实操,第一步肯定要把大致布局搞定。做这个布局用到的知识难点有fr

    2024年02月03日
    浏览(47)
  • Android Jetpack Compose之底部导航栏的实现

    写过一段Android jetpack compose 界面的小伙伴应该都用过Compose的脚手架 Scaffold ,利用它我们可以很快的实现一个现代APP的主流界面架构,即一个带顶部导航栏和底部导航栏的界面架构,我们基于这个架构可以快速的搭建出我们想要的页面效果。而今天的文章就是要介绍如何实现

    2024年03月23日
    浏览(35)
  • android 关于TabLayout联动ViewPager2 实现底部导航栏

    最近在心血来潮想写在app 不过我关于android可以说是0基础 在写底部导航栏的时候去问了大佬才知道TabLayout和ViewPager 花了两天才看懂... 这里只是简单介绍因为我不准备专门做安卓软件所以在学的途中很多地方没有认真记 本篇文章使用的代码是Java 这里官方是有将两个进行联动

    2024年01月25日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包