20240216

简单的使用一些Material组件

自己完全绘制界面是非常麻烦的,还好有现成的Material组件来使用,这里简单的使用一些Material组件。

1. Scaffold

Scaffold是Material组件库中提供的一个页面脚手架,它包含了Appbar、Drawer、BottomNavigationBar、FloatingActionButton等常用的组件,使用Scaffold可以很容易的构建出一个标准的Material风格页面。

比如在下面的例子中,我只是需要我的记账本App中的顶栏和底部的悬浮添加按钮,那么我只需要在Scaffold中设置appBar和floatingActionButton属性即可。

Scaffold(
            topBar = {
                TopAppBar(
                    colors = TopAppBarDefaults.topAppBarColors(
                        containerColor = MaterialTheme.colorScheme.primaryContainer,
                        titleContentColor = MaterialTheme.colorScheme.primary,
                    ),
                    title = {
                        Text("Expense Tracker")
                    }
                )
            },
            floatingActionButton = {
                ExtendedFloatingActionButton(
                    onClick = { appUiState.showModalBottomSheet.value = true },
                    icon = { Icon(Icons.Filled.Add, "Add New Expense Record") },
                    text = { Text(text = "Add New") },
                )
            }
        )   {
            ...
        }

2.Card

Card是一个Material组件,它是一个卡片,可以用来包裹一些内容,在这个例子中,我需要在我的记账本App中展示一些账单记录,那么我就可以使用Card来包裹这些记录。

@Composable
fun ExpenseRecordContent(record: ExpenseRecord) {
    Card(
        modifier = Modifier
            .fillMaxWidth()
            .padding(10.dp)
    ) {
        Column(modifier = Modifier.padding(10.dp, 10.dp)) {
            Text(
                text = record.name,
                style = MaterialTheme.typography.titleSmall
            )
            Text(
                text = record.money.toString(),
                modifier = Modifier.fillMaxWidth(),
                textAlign = TextAlign.End,
                style = MaterialTheme.typography.displayMedium
            )
            Text(
                text = record.time.toString(),
                modifier = Modifier.fillMaxWidth(),
                textAlign = TextAlign.End,
                style = MaterialTheme.typography.labelSmall
            )
        }
    }
}

这里定义了一个ExpenseRecordContent的Composable函数,它接受一个ExpenseRecord对象作为参数,然后使用Card包裹了这个记录的内容。Card里面的内容是一个Column,里面包含了这个记录的名称、金额和时间。

3. ModalBottomSheet

ModalBottomSheet是一个底部弹出的面板,可以用来展示一些额外的内容,比如在这个例子中,我需要在我的记账本App中添加一个新的账单记录,那么我就可以使用ModalBottomSheet来展示一个表单,让用户输入新的账单记录。

为了管理ModalBottomSheet的显示和隐藏,我使用了一个appUiState的状态对象,它包含了一个showModalBottomSheet的MutableState,当这个状态为true时,ModalBottomSheet就会显示出来。

if (appUiState.showModalBottomSheet.value) {
                    ModalBottomSheet(
                        onDismissRequest = { appUiState.showModalBottomSheet.value = false },
                        modifier = Modifier.navigationBarsPadding(),
                    ) {
                        ExpenseRecordInputSheet(appViewModel)
                    }
                }

在这个例子中,我使用了ModalBottomSheet来展示一个表单,让用户输入新的账单记录。当用户点击了悬浮添加按钮时,我就会将showModalBottomSheet的状态设置为true,这样ModalBottomSheet就会显示出来。

posted @ 2024-02-17 23:53  satou_matsuzaka  阅读(3)  评论(0编辑  收藏  举报

This is a Test

メイドノココロハ アヤツリドール