android——compose底部导航栏、顶部toolbar、悬浮按钮floatingActionButtonPosition、Scaffold、完美的底部导航栏

本文展示了如何使用JetpackCompose来简洁地实现底部导航栏、顶部ToolBar和悬浮按钮,对比了传统XML方式的复杂性,并提供了具体的代码示例。通过Compose,代码变得更易理解和维护。
摘要由CSDN通过智能技术生成

如果是按照以前老版本xml的方式来实现:底部导航栏、顶部toolbar、悬浮按钮floatingActionButtonPosition,代码会比较多而且很难懂,现在我们来看看使用神奇的compose来实现,效果图:

依赖:
implementation 'androidx.compose.material:material:1.2.1'
代码:

@Composable
fun MainPage() {
    //当前选择的NavItem
    var selectIndex by remember { mutableStateOf(0) }
    val navTextList = listOf("主页", "发现", "我的")
    //图标
    val iconList = listOf(Icons.Default.Home, Icons.Default.Favorite, Icons.Default.AccountBox)
    Scaffold(
        topBar = {
            TopAppBar(
                navigationIcon = {
                    IconButton(
                        onClick = {}
                    ) {
                        Icon(Icons.Filled.Menu, null)
                    }
                },
                title = {
                    Text("stars-one的测试应用")
                },
                actions = {
                    IconButton(
                        onClick = {}
                    ) {
                        Icon(Icons.Filled.Share, null)
                    }
                    IconButton(
                        onClick = {}
                    ) {
                        Icon(Icons.Filled.Settings, null)
                    }
                },
//                backgroundColor = colorResource(id = R.color.purple_700)
            )
        },
        floatingActionButton = {
            FloatingActionButton(onClick = { /*TODO*/ }) {
                Icon(imageVector = Icons.Default.Add, contentDescription = null)
            }
        },
        bottomBar = {
//            BottomNavigation(backgroundColor = colorResource(id = R.color.white)) { // 底部背景颜色
            BottomNavigation {
                navTextList.forEachIndexed { index, str ->
                    BottomNavigationItem(
                        label = { Text(str) },
                        selected = index == selectIndex,
                        //选中选项的颜色 (text\icon\波纹)
                        selectedContentColor = colorResource(id = R.color.white),
                        //未选中选项的颜色 (text\icon\波纹)
                        unselectedContentColor = colorResource(id = R.color.black_bottomnav),
                        // 默认为true,底部的字未选中时是否显示
                        alwaysShowLabel = false,
                        onClick = { selectIndex = index },
                        icon = {
                            Icon(imageVector = iconList[index], contentDescription = null)
                        })
                }
            }
        },
        //注意此参数,可以实现图中那种被裁剪的效果,前提是上面的cutoutShape也有设置
        floatingActionButtonPosition = FabPosition.End

    ) {
        //这里是主界面
        //根据底部导航选中的下标改变展示的页面
        when (selectIndex) {
            0 -> Text("这是首页")
            1 -> Text("这是发现")
            2 -> Text("这是我的")
        }

    }
}

是不是很简单,这样就可以了,谢谢观赏

完美的底部导航栏

本人在多个项目中使用,已经修复使用中出现的bug

下载地址为:https://download.csdn.net/download/wy313622821/88225624

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy313622821

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值