显示交互式组件 集合
使用可组合函数实现 Material Design 组件。
@Composable fun ScaffoldExample() { var presses by remember { mutableIntStateOf(0) } Scaffold( topBar = { TopAppBar( colors = topAppBarColors( containerColor = MaterialTheme.colorScheme.primaryContainer, titleContentColor = MaterialTheme.colorScheme.primary, ), title = { Text("Top app bar") } ) }, // View this quick guide to see the rest of the code, https://developer.android.com/quick-guides/content/create-scaffold
创建脚手架组件以将 UI 结合在一起
一个基础结构,为复杂的 UI 提供标准化的平台。脚手架将 UI 的不同部分(例如应用栏和浮动操作按钮)组合在一起,使应用具有连贯的外观和感觉。
@Composable fun SmallTopAppBarExample() { Scaffold( topBar = { TopAppBar( colors = TopAppBarDefaults.topAppBarColors( containerColor = MaterialTheme.colorScheme.primaryContainer, titleContentColor = MaterialTheme.colorScheme.primary, ), title = { Text("Small Top App Bar") } ) }, ) { innerPadding -> ScrollContent(innerPadding) } }
显示应用栏
容器为用户提供对关键功能和导航项目的访问。应用栏有两种类型:顶部应用栏和底部应用栏。
val sheetState = rememberModalBottomSheetState() val scope = rememberCoroutineScope() var showBottomSheet by remember { mutableStateOf(false) } Scaffold( floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show bottom sheet") }, icon = { Icon(Icons.Filled.Add, contentDescription = "") }, onClick = { showBottomSheet = true } ) } ) { contentPadding -> // Screen content if (showBottomSheet) { ModalBottomSheet( onDismissRequest = { showBottomSheet = false }, sheetState = sheetState ) { // Sheet content Button(onClick = { scope.launch { sheetState.hide() }.invokeOnCompletion { if (!sheetState.isVisible) { showBottomSheet = false } } }) { Text("Hide bottom sheet") } } } }
创建按钮
这些基本组件允许用户触发已定义的操作。按钮有五种类型。查看五种按钮类型的每个外观以及您应该在何处使用它们,并了解如何实现它们。
@Composable fun Example(onClick: () -> Unit) { FloatingActionButton( onClick = { onClick() }, ) { Icon(Icons.Filled.Add, "Floating action button.") } }
创建浮动操作按钮 (FAB)
一个高度强调的按钮,允许用户在应用程序中执行主要操作。此按钮组件促进单个、集中的操作,这是用户可能采取的最常见路径,通常位于屏幕的右下方。
@Composable fun CardMinimalExample() { Card() { Text(text = "Hello, world!") } }
创建卡片作为容器
充当 UI 的 Material Design 容器。卡片通常呈现单个连贯的内容块。正是专注于描绘单个内容块,将卡片与其他容器区分开来。
@Composable fun AssistChipExample() { AssistChip( onClick = { Log.d("Assist chip", "hello world") }, label = { Text("Assist chip") }, leadingIcon = { Icon( Icons.Filled.Settings, contentDescription = "Localized description", Modifier.size(AssistChipDefaults.IconSize) ) } ) }
创建芯片以表示复杂实体
一个紧凑的交互式 UI 元素,表示联系人或标签等复杂实体,通常带有图标和标签。芯片可以是可选中、可移除或可点击的。
@Composable fun DialogExamples() { // ... val openAlertDialog = remember { mutableStateOf(false) } // ... when { // ... openAlertDialog.value -> { AlertDialogExample( onDismissRequest = { openAlertDialog.value = false }, onConfirmation = { openAlertDialog.value = false println("Confirmation registered") // Add logic here to handle confirmation. }, dialogTitle = "Alert dialog example", dialogText = "This is an example of an alert dialog with buttons.", icon = Icons.Default.Info ) } } } }
显示弹出消息或用户输入请求
在主应用内容之上的图层上显示弹出消息或用户输入请求。此组件创建中断性 UI 体验以吸引用户注意。
@Composable fun LinearDeterminateIndicator() { var currentProgress by remember { mutableStateOf(0f) } var loading by remember { mutableStateOf(false) } val scope = rememberCoroutineScope() // Create a coroutine scope Column( verticalArrangement = Arrangement.spacedBy(12.dp), horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.fillMaxWidth() ) { Button(onClick = { loading = true scope.launch { loadProgress { progress -> currentProgress = progress } loading = false // Reset loading when the coroutine finishes } }, enabled = !loading) { Text("Start loading") } if (loading) { LinearProgressIndicator( progress = { currentProgress }, modifier = Modifier.fillMaxWidth(), ) } } }
创建进度指示器
直观地显示操作的状态。使用运动来提醒用户进程完成的接近程度,例如加载或处理数据,这些指示器可以表示正在进行处理,而无需指示完成的接近程度。
@Preview @Composable fun SliderMinimalExample() { var sliderPosition by remember { mutableFloatStateOf(0f) } Column { Slider( value = sliderPosition, onValueChange = { sliderPosition = it } ) Text(text = sliderPosition.toString()) } }
创建用于一系列值的滑块
使用户能够从连续统一体的一系列值中进行选择,例如设置音频音量或跨一系列价格过滤图形数据。
@Composable fun SwitchMinimalExample() { var checked by remember { mutableStateOf(true) } Switch( checked = checked, onCheckedChange = { checked = it } ) }
添加用户可以切换的开关
使用户能够在两种状态之间切换。用户可以拖动或点击开关的拇指以更改当前状态。
val sheetState = rememberModalBottomSheetState() val scope = rememberCoroutineScope() var showBottomSheet by remember { mutableStateOf(false) } Scaffold( floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show bottom sheet") }, icon = { Icon(Icons.Filled.Add, contentDescription = "") }, onClick = { showBottomSheet = true } ) } ) { contentPadding -> // Screen content if (showBottomSheet) { ModalBottomSheet( onDismissRequest = { showBottomSheet = false }, sheetState = sheetState ) { // Sheet content Button(onClick = { scope.launch { sheetState.hide() }.invokeOnCompletion { if (!sheetState.isVisible) { showBottomSheet = false } } }) { Text("Hide bottom sheet") } } } }
创建底部工作表
显示固定在屏幕底部的辅助内容。您可以使用标准或模态底部工作表向用户显示辅助内容。
ModalNavigationDrawer( drawerContent = { ModalDrawerSheet { Text("Drawer title", modifier = Modifier.padding(16.dp)) Divider() NavigationDrawerItem( label = { Text(text = "Drawer Item") }, selected = false, onClick = { /*TODO*/ } ) // ...other drawer items } } ) { // Screen content }
使用导航抽屉组件创建滑入菜单
一个滑入菜单,使用户可以导航到应用的各个部分。用户可以通过从侧面滑动或点击菜单图标来激活它。
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { snackbarHostState.showSnackbar("Snackbar") } } ) } ) { contentPadding -> // Screen content }
使用 Snackbar 创建通知
在屏幕底部显示简短的通知。这可以提供有关操作或操作的反馈,而不会中断用户体验。Snackbar 在几秒钟后消失。用户也可以手动关闭它们。
显示列表或网格
使用列表和网格有效地显示和排列项目集合。
有问题或反馈吗?
访问我们的常见问题页面,了解有关快速指南的信息,或与我们联系,告诉我们您的想法。