iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)
  • 880
分享到

Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)

androidjavaandroidstudio 2023-10-18 12:10:01 880人浏览 薄情痞子
摘要

现在常用的App主页都会有一个底部导航栏,根据需求也使用过好几种方法进行实现,于是想着还是总结一下,今天还写一个简单的BottomNavigationView方法来实现这个功能 Android 底部导航栏(二、自定义View+Fragmen

现在常用的App主页都会有一个底部导航栏,根据需求也使用过好几种方法进行实现,于是想着还是总结一下,今天还写一个简单的BottomNavigationView方法来实现这个功能

Android 底部导航栏(二、自定义View+Fragment)_&岁月不待人&的博客-CSDN博客

Android 底部导航栏(三、ViewPager+TabLayout+Fragment)简单易懂_&岁月不待人&的博客-CSDN博客_android 获取底部导航栏

Android 底部导航栏(四、ViewPager+RadioGroup+Fragment)简单易懂_&岁月不待人&的博客-CSDN博客

 

一、什么是BottomNavigationView?

它是Android原生的一个底部导航框架,一般和Fragment一起使用。

二、实际操作

xml布局:最外层的layout不用管,那是databinding框架的根布局,主要的布局FrameLayout来装载fragment列表,BottomNavigationView实现底部导航栏,最后监听绑定实现点击切换

                                        

其中BottomNavigationView控价下的app:menu属性为BottomNavigationView增加item

它是在menu文件下新增nav_menu布局,如何新建呢?看图

然后选择menu类型,命名就用默认的menu就行了 ,然后

 就可以了,然后往里面加item

                    

这样就把menu创建好了,接下来是Activity里面的代码:

class NavMenuActivity : BaseBindActivity() {    override val layout: Int        get() = R.layout.nav_menu_activity_layout    private lateinit var homeFragment: HomeFragment    private lateinit var toolsFragment: ToolsFragment    private lateinit var relaxFragment: RelaxFragment    private lateinit var meFragment: MineFragment    private lateinit var playFragment: PlayFragment    private lateinit var fragments: Array    private var mTextMessage: TextView? = null        //监听Item    private val mOnNavigationItemSelectedListener: BottomNavigationView.OnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->        when (item.itemId) {            R.id.navigation_home -> {                replaceFragment(fragments[0], fragments[0].tag.toString())                mTextMessage?.text = "第1个fragment"                return@OnNavigationItemSelectedListener true            }            R.id.navigation_tools -> {                replaceFragment(fragments[1], fragments[1].tag.toString())                mTextMessage?.text = "第2个fragment"                return@OnNavigationItemSelectedListener true            }            R.id.navigation_play -> {                replaceFragment(fragments[2], fragments[2].tag.toString())                mTextMessage?.text = "第3个fragment"                return@OnNavigationItemSelectedListener true            }            R.id.navigation_relax -> {                replaceFragment(fragments[3], fragments[3].tag.toString())                mTextMessage?.text = "第4个fragment"                return@OnNavigationItemSelectedListener true            }            R.id.navigation_user_center -> {                replaceFragment(fragments[4], fragments[4].tag.toString())                mTextMessage?.text = "第5个fragment"                return@OnNavigationItemSelectedListener true            }        }        false    }        override fun initView() {        val navigation: BottomNavigationView = findViewById(R.id.nav_menu)        mTextMessage = findViewById(R.id.nav_text)        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)        navigation.itemIconTintList = null        navigation.itemTextColor = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.black))        homeFragment = HomeFragment()        toolsFragment = ToolsFragment()        relaxFragment = RelaxFragment()        meFragment = MineFragment()        playFragment = PlayFragment()        fragments = arrayOf(homeFragment, toolsFragment, playFragment, relaxFragment, meFragment)        fragments.forEach {            addFragment(it, it.tag.toString())            hideFragment(it)        }        showFragment(fragments[0])    }    //添加Fragment到FragmentList中    private fun addFragment(fragment: Fragment, tag: String) {        val fragmentManager = supportFragmentManager        val transaction: FragmentTransaction = fragmentManager.beginTransaction()        transaction.add(R.id.fragment_container, fragment, tag)        transaction.commit()    }    // 清空fragmentList的所有Fragment,替换成新的Fragment,注意Fragment里面的坑    private fun replaceFragment(fragment: Fragment, tag: String) {        val fragmentManager = supportFragmentManager        val transaction: FragmentTransaction = fragmentManager.beginTransaction()        transaction.replace(R.id.fragment_container, fragment, tag)        transaction.commit()    }    //把Fragment设置成显示状态,但是并没有添加到FragmentList中    private fun showFragment(fragment: Fragment) {        val fragmentManager = supportFragmentManager        val transaction: FragmentTransaction = fragmentManager.beginTransaction()        transaction.show(fragment)        transaction.commit()    }    //把Fragment设置成显示状态,但是并没有添加到FragmentList中    private fun hideFragment(fragment: Fragment) {        val fragmentManager = supportFragmentManager        val transaction: FragmentTransaction = fragmentManager.beginTransaction()        transaction.hide(fragment)        transaction.commit()    }}

代码很简单,先把fragment列表添加到FrameLayout容器里,默认展示第一个fragment,通过BottomNavigationView.OnNavigationItemSelectedListener 方法,实现了fragment的切换。

展示效果:

一些总结:

 navigation.itemIconTintList = null 这行代码不可缺少,不然你的导航栏的item图片会很丑,这行代码,可以让你的图片正常展示,因为默认的menu有个很丑的类似于蒙层的感觉。

navigation.itemTextColor = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.black)) 这个是设置item的文本颜色

来源地址:https://blog.csdn.net/LoveFHM/article/details/125498372

--结束END--

本文标题: Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)

本文链接: https://www.lsjlt.com/news/431296.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作