最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JetPack Compose底部導(dǎo)航欄的實現(xiàn)方法詳解

 更新時間:2022年09月06日 15:11:51   作者:兒歌八萬首  
開發(fā)一個新項目,底部導(dǎo)航欄一般是首頁的標(biāo)配,在以前的xml布局中,我們可以很輕松的是用谷歌提供的BottomNavigationView或者自定義來實現(xiàn)底部導(dǎo)航的功能,在Compose中也有也提供了一個類似的控件androidx.compose.material.BottomNavigation

1.聲明導(dǎo)航欄數(shù)據(jù)源

主要聲明導(dǎo)航欄label和圖標(biāo)數(shù)組,這里使用的是本地數(shù)據(jù),也可以使用網(wǎng)絡(luò)數(shù)據(jù)。

//導(dǎo)航label數(shù)組
private val labels = arrayOf("首頁", "房訊", "消息", "我的")
//導(dǎo)航默認圖標(biāo)集合
private val defImages =
    arrayOf(R.mipmap.img_index, R.mipmap.img_info, R.mipmap.img_message, R.mipmap.img_preson)
//導(dǎo)航選中圖標(biāo)集合
private var selectImages =
    arrayOf(
        R.mipmap.img_index_select,
        R.mipmap.img_info_select,
        R.mipmap.img_message_select,
        R.mipmap.img_preson_select
    )
//導(dǎo)航選中索引
private var selectIndex by mutableStateOf(0)

2.使用Scaffold搭建頁面結(jié)構(gòu)

Compose給我們提供了Scaffold腳手架,實現(xiàn)了Material設(shè)計的頁面基本結(jié)構(gòu)。包括標(biāo)題欄、底部欄、SnackBar(類似吐司功能)、浮動按鈕、抽屜組件、剩余內(nèi)容布局等,讓我們可以快速定義一個基本的頁面結(jié)構(gòu)。

setContent {
    val navController = rememberNavController()
    Scaffold(
        //設(shè)置底部導(dǎo)航欄
        bottomBar = {
            BuildBottomBar(labels = labels, navController)
        },
    ) {
        //設(shè)置頁面主內(nèi)容區(qū)域,這里通過NavHost,根據(jù)選中不同的導(dǎo)航欄Tab導(dǎo)航到不同的頁面。
        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,用來構(gòu)建導(dǎo)航欄的樣式,BottomNavigationItem中可以設(shè)置iconlabel,選中顏色和未選中顏色等等一些常用的屬性??梢越oitem設(shè)置點擊事件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)
        })
    }
}

這里用了一個循環(huán)來添加BottomNavigationItem,通過selectIndex來判斷tab是否選中。在點擊事件中設(shè)置選中的索引。 這里要注意的是在Compose中導(dǎo)航主要是用NavHostController來進行控制。 需要引入單獨的依賴庫

通常這個實例是用rememberNavController()來獲取。

val navController = rememberNavController()

可以通過navigate方法來進行導(dǎo)航到具體也面,naviget傳人的參數(shù)和NavHost中的startDestination參數(shù)一致,這樣就可以跳轉(zhuǎn)到指定頁面中

navController.navigate(labels[i])

到此這篇關(guān)于JetPack Compose底部導(dǎo)航欄的實現(xiàn)方法詳解的文章就介紹到這了,更多相關(guān)JetPack Compose底部導(dǎo)航欄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

淮阳县| 祥云县| 望谟县| 威海市| 汤原县| 抚松县| 建昌县| 广德县| 阳春市| 仙游县| 侯马市| 凤山市| 峨眉山市| 大同市| 米脂县| 桐梓县| 平湖市| 搜索| 鱼台县| 涿鹿县| 三穗县| 和平区| 水城县| 明光市| 中江县| 民丰县| 芜湖市| 浦县| 扶风县| 肥东县| 南投县| 平利县| 麟游县| 永登县| 瓮安县| 天门市| 固阳县| 云霄县| 临桂县| 车致| 阳城县|