網站首頁 編程語言 正文
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
中可以設置icon
和label
,選中顏色和未選中顏色等等一些常用的屬性。可以給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])
原文鏈接:https://blog.csdn.net/cj641809386/article/details/120704746
相關推薦
- 2022-03-30 C語言入門之淺談數據類型和變量常量_C 語言
- 2022-10-29 Clickhouse通過命令導入導出文件(在Linux命令窗口)
- 2022-03-20 C++?Qt繪制時鐘界面_C 語言
- 2022-07-12 如何利用python實現kmeans聚類_python
- 2022-12-24 Kubernetes?ApiServer三大server權限與數據存儲解析_云和虛擬化
- 2023-06-17 詳解Flask數據庫的連接與使用_python
- 2022-02-11 tomcat?logs?目錄下各日志文件的解析(小結)_Tomcat
- 2022-04-15 python實現購物車功能_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支