当前位置:主页 > android教程 > JetPack Compose底部导航栏

JetPack Compose底部导航栏的实现方法详解

发布:2023-03-06 16:00:01 59


为找教程的网友们整理了相关的编程文章,网友双作人根据主题投稿了本篇教程内容,涉及到JetPack、Compose底部导航栏、JetPack、Compose、Android、底部导航栏、JetPack Compose底部导航栏相关内容,已被897网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

JetPack Compose底部导航栏

1.声明导航栏数据源

主要声明导航栏label和图标数组,这里使用的是本地数据,也可以使用网络数据。

//导航label数组
private val labels = arrayOf("首页", "房讯", "消息", "我的")
//导航默认图标集合
private val defImages =
    arrayOf(R.mipmap.img_index, R.mipmap.img_info, R.mipmap.img_message, R.mipmap.img_preson)
//导航选中图标集合
private var selectImages =
    arrayOf(
        R.mipmap.img_index_select,
        R.mipmap.img_info_select,
        R.mipmap.img_message_select,
        R.mipmap.img_preson_select
    )
//导航选中索引
private var selectIndex by mutableStateOf(0)

2.使用Scaffold搭建页面结构

Compose给我们提供了Scaffold脚手架,实现了Material设计的页面基本结构。包括标题栏、底部栏、SnackBar(类似吐司功能)、浮动按钮、抽屉组件、剩余内容布局等,让我们可以快速定义一个基本的页面结构。

setContent {
    val navController = rememberNavController()
    Scaffold(
        //设置底部导航栏
        bottomBar = {
            BuildBottomBar(labels = labels, navController)
        },
    ) {
        //设置页面主内容区域,这里通过NavHost,根据选中不同的导航栏Tab导航到不同的页面。
        NavHost(navController = navController, startDestination = labels[selectIndex]) {
            composable(labels[0]) {
                //首页Compose
                IndexPage()
            }
            composable(labels[1]) {
                //咨询Compose
                InfoPage()
            }
            composable(labels[2]) {
                //消息Compose
                MessagePage()
            }
            composable(labels[3]) {
                //个人中心Compose
                PersonPage()
            }
        }
    }
}

3.BottomNavigation的用法

BottomNavigation中的content可以添加多个BottomNavigationItem,用来构建导航栏的样式,BottomNavigationItem中可以设置iconlabel,选中颜色和未选中颜色等等一些常用的属性。可以给item设置点击事件onClick等。

BottomNavigation(backgroundColor = Color.White, elevation = 6.dp) {
    for (i in labels.indices) {
        BottomNavigationItem(selected = selectIndex == i, onClick = {
            selectIndex = i
            navController.navigate(labels[i])
        }, icon = {
            Image(
                painter = painterResource(id = if (selectIndex == i) selectImages[i] else defImages[i]),
                contentDescription = labels[i],
                modifier = Modifier.size(25.dp)
            )
        }, label = {
            Text(text = labels[i], color = if (selectIndex == i) Color.Red else Color.Gray)
        })
    }
}

这里用了一个循环来添加BottomNavigationItem,通过selectIndex来判断tab是否选中。在点击事件中设置选中的索引。 这里要注意的是在Compose中导航主要是用NavHostController来进行控制。 需要引入单独的依赖库

通常这个实例是用rememberNavController()来获取。

val navController = rememberNavController()

可以通过navigate方法来进行导航到具体也面,naviget传人的参数和NavHost中的startDestination参数一致,这样就可以跳转到指定页面中

navController.navigate(labels[i])

到此这篇关于JetPack Compose底部导航栏的实现方法详解的文章就介绍到这了,更多相关JetPack Compose底部导航栏内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


相关文章

  • 解析Android Jetpack简介

    发布:2023-03-07

    Jetpack是一套库、工具和指南的集合,帮助开发者更轻松地编写优质应用,这篇文章主要介绍了Android Jetpack简介,需要的朋友可以参考下


  • Android开发Jetpack组件ViewModel与LiveData使用讲解

    发布:2023-03-11

    Jetpack是一个由多个技术库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者精力集中编写重要的代码


  • Android Jetpack组件库LiveData源码深入探究

    发布:2023-03-11

    LiveData是Jetpack组件的一部分,更多的时候是搭配ViewModel来使用,相对于Observable,LiveData的最大优势是其具有生命感知的,换句话说,LiveData可以保证只有在组件( Activity、Fragment、Service)处于活动生命周期状态的时候才会更新数据


  • Android Jetpack组件支持库DataBinding与ViewModel与LiveData及Room详解

    发布:2023-03-12

    Jetpack是一个由多个技术库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者精力集中编写重要的代码


  • Android中分析Jetpack Compose动画内部的实现原理

    发布:2023-03-04

    这篇文章主要介绍了Android中分析Jetpack Compose动画内部的实现原理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下


  • Jetpack Compose 的新型架构 MVI使用详解

    发布:2023-03-11

    这篇文章主要介绍了Jetpack Compose 的新型架构 MVI使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Jetpack Compose布局的使用详细介绍

    发布:2023-03-06

    Jetpack Compose是用于构建原生Android界面的新工具包。它可简化并加快Android上的界面开发,使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩


  • Android Jetpack组件中LifeCycle作用详细介绍

    发布:2023-03-08

    Jetpack是谷歌在Google I/O 2017大会上发布一套帮助开发者解决Android架构设计的方案,而Lifecycle是Jetpack architecture下的一部分,一起来看一下Lifecycle的使用及原理分析


网友讨论