就像 EditText 一样,在 Compose 中我们可以使用TextField和BaseTextField。BaseTextField仍处于试验阶段,可以随时删除或永世添加。因此,要使用BaseTextField,您必要添加@ExperimentalFoundationApi解释。
下面是一个简单的例子BaseTextField:
@ExperimentalFoundationApi@Composablefun SimpleTextFieldComponent() { Surface(color = Color.LightGray, modifier = Modifier.padding(16.dp)) { var text by remember { mutableStateOf(TextFieldValue("Enter text here")) } BaseTextField( value = text, modifier = Modifier.padding(16.dp).fillMaxWidth(), onValueChange = { text = it } ) }}在上面的函数中,我们有一个BaseTextFieldinside a Surface。我们有一个名为 的回调onValueChange。当 的输入发生一些厘革时调用此回调,BaseTextField而且更新的文本将作为回调的参数出现。
这是一个例子BaseTextField。Material Design 还为 EditText 提供了一个 Composable,即TextField. 一个简单的实现TextField如下:
@Composablefun SimpleMaterialTextFieldComponent() { var text by savedInstanceState { "" } TextField( value = text, modifier = Modifier.padding(16.dp).fillMaxWidth(), onValueChange = { text = it }, label = { Text("Label") } )}TextField的行为类似于BaseTextField。在这里TextField,你尚有一件事,即label。标签是在TextField中没有文本时体现在 中的文本TextField。
我们可以通过向它通报各种参数来自界说这个 BaseTextField 和 TextField。比方,
仅体现数字键盘:
var text by remember { mutableStateOf(TextFieldValue("0123")) }BaseTextField(value = text, keyboardType = KeyboardType.Number, onValueChange = { text = it })
Android Studio 提供了一个很棒的功能,可以在工作室本身中预览您的 UI 组件,而且非常动态。因此,每当您想测试一些 UI 组件时,您都可以通过制作 Composable 函数并使用@Preview注解在 Android Studio 中简单地预览它。
以下是类似的示例:
// This is a Composable function to display a Text@Composablefun SimpleText(displayText: String) { Text(text = displayText)}@Preview@Composablefun SimpleTextPreview() { SimpleText("Hi I am learning Compose")}现在,在预览选项卡(Studio 的右侧)中,您可以看到上述 Composable 函数的预览。
您可以使用差别宽度和高度的恣意数目的预览。如果您单击预览中的任何 UI 元素,Android Studio 会将您带到创建该 UI 的行。
别的,您可以使用参数将一些名称放入预览中name。要定名预览,您必要添加以下代码:
@Preview(name = "Named Preview")默认情况下,预览的名称是函数的名称。 留意:您不能将任何参数通报给 Preview Composable 函数。
预览参数
在上一节中,我们学习了怎样使用 Android Studio 的预览功能。现在,当我们制作任何 Android 应用步伐时,在大多数情况下,数据都来自服务器,我们将这些数据添补到我们的应用步伐中。因此,下一个题目是怎样预览数据来自服务器的 UI,即,其数据现在不可用。对于这些情况,我们可以使用@PreviewParameter注解。
重要头脑是制作一个捏造数据并将该捏造数据通报给预览可组合函数。由于您不能将任何参数通报给 Preview Composable Function,因此为了实现这一点,您必要使用@PreviewParamter注解来通报参数。
以是,让我们起首创建一个捏造数据类。
创建一个名为的数据类Blog.kt并将以下代码添加到此中:
data class Blog( val name: String, val author: String)现在,创建一个名为的类DummyBlogProvider,它实现了一个名为 的接口PreviewParameterProvider:
class DummyBlogProvider : PreviewParameterProvider<Blog> { override val values = sequenceOf(Blog("Learning Compose", "MindOrks"), Blog("Learning Android", "MindOrks")) override val count: Int = values.count()}现在,我们完成了捏造数据,我们可以在预览中使用这个捏造数据。以下是类似的示例:
@Preview@Composablefun BlogInfo(@PreviewParameter(DummyBlogProvider::class) blog: Blog) { SimpleTextComponent("${blog.name} by ${blog.author}")}您可以使用捏造数据检察 UI 的预览。
Column
AColumn是一种可组合的布局,用于将其全部子级一个接一个地垂直放置。它类似于具有垂直方向的 LinearLayout。
以下是列的示例:
@Composablefun SimpleColumnComponent() { Column(modifier = Modifier.padding(16.dp)) { Text(text = "Hello! I am Text 1", color = Color.Black) Text(text = "Hello! I am Text 2", color = Color.Blue) }}Scrollable Column
您可以使用 Clickable 对用户做出可组合的反应。Clickable 支持单次点击、双击和长按。
以下是类似的示例:
@Composablefun SimpleTextComponent() { val context = ContextAmbient.current Text( text = "Click Me", textAlign = TextAlign.Center, color = Color.Black, modifier = Modifier.padding(16.dp).fillMaxWidth().clickable(onClick = { Toast.makeText(context, "Thanks for clicking! I am Text", Toast.LENGTH_SHORT).show() }, onLongClick = { Toast.makeText(context, "Thanks for LONG click! I am Text", Toast.LENGTH_SHORT).show() }, onDoubleClick = { Toast.makeText(context, "Thanks for DOUBLE click! I am Text", Toast.LENGTH_SHORT).show() }) )}同样,您可以使卡片可点击。
Image
要体现图像,我们可以使用Image可组合的。
@Composablefun SimpleImageComponent() { // Image is a composable that is used to display some image. val image = imageResource(R.drawable.mindorks_cover) Column( modifier = Modifier.padding(16.dp) ) { Image(image) }}您还可以使用以下代码制作圆角图像:
Image( image, modifier = Modifier.fillMaxWidth().clip(shape = RoundedCornerShape(8.dp)), contentScale = ContentScale.Fit)Alert Dialog
顾名思义,AlertDialog 用于以对话框的情势向用户体现一些紧张的消息(大概有一些操作)。
我们在 AlertDialog 中有标题、文本、确认按钮和关闭按钮。
@Composablefun AlertDialogComponent() { val openDialog = remember { mutableStateOf(true) } if (openDialog.value) { AlertDialog( onDismissRequest = { openDialog.value = false }, title = { Text(text = "Alert Dialog") }, text = { Text("Hello! I am an Alert Dialog") }, confirmButton = { TextButton( onClick = { openDialog.value = false /* Do some other action */ } ) { Text("Confirm") } }, dismissButton = { TextButton( onClick = { openDialog.value = false /* Do some other action */ } ) { Text("Dismiss") } }, backgroundColor = Color.Black, contentColor = Color.White ) }}Material AppBar