android compose Drawer抽屉 使用

android compose Drawer抽屉 使用

复制代码
/**
 * Author : wn
 * Email : maoning20080809@163.com
 * Date : 2026/1/4 20:54
 * Description : 抽屉Drawer
 */
class DrawerActivity : ComponentActivity(){

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            testDrawer()
        }
    }

    @OptIn(ExperimentalMaterial3Api::class)
    @Preview
    @Composable
    private fun testDrawer(){
        val myDrawerState = rememberDrawerState(DrawerValue.Closed)
        val scope = rememberCoroutineScope()


        ModalNavigationDrawer(
            drawerState = myDrawerState,
            gesturesEnabled = true,
            drawerContent = {
                ModalDrawerSheet(modifier = Modifier.width(300.dp)) {
                    //抽屉头部
                    Spacer(modifier = Modifier.height(12.dp))

                    NavigationDrawerItem(
                        icon = { Icon(Icons.Default.AccountCircle,null) },
                        label = {Text(text = "用户名称")},
                        selected = false,
                        onClick = {}
                    )
                    
                    Spacer(modifier = Modifier.height(8.dp))

                    //分割线
                    Divider()

                    //导航项
                    NavigationDrawerItem(
                        icon = {Icon(Icons.Default.Home, null)},
                        label = {Text(text = "首页")},
                        selected = true,
                        onClick = {
                            scope.launch { myDrawerState.close() }
                        }
                    )

                    NavigationDrawerItem(
                        icon = {Icon(Icons.Default.Person, null)},
                        label = {Text(text = "个人资料")},
                        selected = false,
                        onClick = {
                            scope.launch { myDrawerState.close() }
                        }
                    )

                    NavigationDrawerItem(
                        icon = {Icon(Icons.Default.Settings, null)},
                        label = {Text(text = "设置")},
                        selected = false,
                        onClick = {
                            scope.launch { myDrawerState.close() }
                        }
                    )
                }
            }
        ) {
            Scaffold(
                topBar = {
                    TopAppBar(title = {Text(text = "我的应用")},
                        navigationIcon = {
                            IconButton(
                                onClick = {
                                    scope.launch { myDrawerState.open() }
                                }
                            ) {
                                Icon(Icons.Default.Menu, "打开抽屉")
                            }
                        }
                    )
                }
            ) {  paddingValues ->
                Box(
                    modifier = Modifier.fillMaxSize().padding(paddingValues),
                    contentAlignment = Alignment.Center
                ){
                    Text(text = "主内容区域")
                }

            }
        }
    }
}
相关推荐
夜雪一千1 天前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
又见情义1 天前
RK3568 Android 13 驱动适配实战:从零开始让SDK在自己的板子上跑起来
android·arm开发·驱动开发
霸道流氓气质1 天前
MySQL 大表 DDL 变更 — 原理、方案与实践
android·数据库·mysql
明雨-开发1 天前
Android打包时候Execution failed for task ‘:launcher:lintVitalAnalyzeRelease‘.
android
游戏开发爱好者81 天前
开心上架是什么,一站式 Apple 开发者工作台总览
android·小程序·https·uni-app·iphone·webview
Android-Flutter1 天前
android kotlin launch 源码分析
android·kotlin
Android-Flutter1 天前
android kotlin 状态机 Continuation 详解
android·kotlin
Zha0Zhun1 天前
Jetpack Compose 实现 iOS 风格 3D WheelPicker
android
深念Y1 天前
RIO-UL00(EMUI 4.1 / Android 6.0.1 / arm64)开机自启动 sshd
android·linux·华为·安卓·chroot·sshd·emui
爱和冰阔落1 天前
【MySQL 慢查询排查实战】列表接口逐渐变慢时,怎样从请求链路定位原因
android·数据库·mysql