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 = "主内容区域")
                }

            }
        }
    }
}
相关推荐
问心无愧05135 小时前
ctf show web入门111
android·前端·笔记
ha_lydms11 小时前
AnalyticDB分区、分布键性能优化
android·大数据·分布式·性能优化·分布式计算·分区·analyticdb
星辰11 小时前
Ijkplayer重新编译支持h264裸流
android
测试开发-学习笔记12 小时前
Android studio安装
android·ide·android studio
宋拾壹12 小时前
同时添加多个类目
android·开发语言·javascript
●VON13 小时前
AtomGit Flutter鸿蒙客户端:数据模型
android·服务器·安全·flutter·harmonyos·鸿蒙
火柴就是我13 小时前
记录一个文本随手指缩放的功能
android
Zender Han14 小时前
Android APK 签名 v1、v2、v3、v4 有什么区别?
android
神仙别闹14 小时前
基于 PHP + MySQL学生信息管理系统
android·mysql·php
墨狂之逸才15 小时前
Android 保活机制详解 —— 从概念到实践
android