Jetpack:006-如何使用输入框

本文介绍了JetpackCompose中的TextField和OutlinedTextField输入框组件,包括它们的使用方法、参数功能如label、value和装饰性图标,以及如何通过示例代码展示不同样式的输入框。


我们在上一章回中介绍了Jetpack中文本组件扩展相关的内容,本章回中主要介绍输入框组件。闲话休提,让我们一起Talk Android Jetpack吧!

1. 概念介绍

我们在本章回中介绍的输入框是指接收文本输入的窗口,最常见的使用场景就是在登录页面中输入用户名和密码。Jetpack compose提供了TextField可组合函数和OutlinedTextField可组合函数来实现输入框,本章回中介绍详细介绍这两个函数的使用方法。

2. 使用方法

2.1 TextField

可组合函数TextField提供了很多参数来控制自己,下面我们将介绍该函数中常用的参数,详细如下:

  • label参数:用来显示名称,表示输入框的功能;
  • value参数:输入框中显示的内容,可以填入默认值;
  • onValueChange参数:它是方法类型,输入内容时回调用此方法;
  • leadingIcon参数:在输入框最左侧显示的图标;
  • trailingIcon参数:在输入框最右侧显示的图标;

上面介绍的这些属性中,前三个属性属于必备的内容,后面两个属性属性装饰性的内容,它可以装饰输入框,让输入框显得更加漂亮。

2.2 OutlinedTextField

可组合函数OutlinedTextField和TextField类似,不同之处在于它会在输入框外侧生成一个边框。这两个函数的参数都一样,我们就不详细介绍了,这里只介绍一个参数colors,通过该参数可以修改输入框自带的边框颜色,以及输入框内的背景和文本的颜色,我们将在后面的小节中通过示例代码来演示具体的修改方法。

3. 示例代码

//带下划线的输入框,不过我在外层加了一层边框
TextField(
    modifier = Modifier
        .fillMaxWidth()
        .padding(16.dp)
        .border(
            width = 2.dp,
            color = Color.Green,
            shape = CircleShape.copy(all = CornerSize(16.dp))
        )
        .clip(shape = CircleShape.copy(all = CornerSize(16.dp)))
        .background(Color.Yellow),
    value = text,
    //默认为false,设置为true时,label和supportText显示为红色
//            isError = true,
    //获取输入的内容
    onValueChange = { text = it },
    placeholder = { Text("pls holder") },
    //开始和结束时的图标
    leadingIcon = { Icon(imageVector = Icons.Default.Person, contentDescription = null)},
    trailingIcon = { Icon(imageVector = Icons.Filled.Notifications, contentDescription = null)},
    //在输入框下方显示的文字
    supportingText = { Text("supporting text ") },
    //在图标后面显示的文字
    label = { Text("Name") },
)

//不带下划线的输入框,不过周围有一圈边框
OutlinedTextField(
    modifier = Modifier
        .fillMaxWidth()
        .padding(16.dp),
    value = text,
    onValueChange = {},
    label = { Text("Name") },
    colors = TextFieldDefaults.outlinedTextFieldColors(
        //修改输入框背景色
        containerColor = Color.Yellow,
        //修改边框颜色
        unfocusedBorderColor = Color.Green,
        focusedBorderColor = Color.Blue,
    ),
)

我们在上面的代码中演示了两种可组合函数的代码,并且在关键位置添加了注释,下面是程序的运行效果图,请大家参考:
在这里插入图片描述

4. 内容总结

最后,我们对本章回中的内容做一个总结:

  • 输入框可以通过可组合函数TextField和OutlinedTextField实现;
  • 两个可组合函数的参数相同,不同之处在于输入框的样式:周围是否有边框;
  • lable参数用来表明输入框的功能,value参数用来存放输入框中显示的内容;
  • onValueChang参数在输入内容时回调,通常使用它来获取输入框中输入的内容;
  • 其它的参数都是用来装饰输入框的,比如边框的颜色,提示内容,边框中的图标等;

看官们,关于Jetpack中输入框组件相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

### 创建和使用可弹出的输入框组件 在 Jetpack Compose 中,可以通过 `TextField` 和 `Dialog` 组件来实现弹出输入框的功能。为了使输入框能够获得焦点并显示软键盘,在定义输入框时可以利用 `FocusRequester` 来请求焦点,并调用相应的 API 显示软键盘。 下面是一个简单的例子展示如何创建一个按钮触发对话框内的文本字段: ```kotlin import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.unit.dp @Composable fun PopUpInputBox() { var showDialog by remember { mutableStateOf(false) } val focusRequester = remember { FocusRequester() } Column( modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { Button(onClick = { showDialog = true }) { Text("Open Input Dialog") } if (showDialog) { AlertDialog( onDismissRequest = { showDialog = false }, title = { Text("Enter your text") }, text = { TextField( value = "", onValueChange = {}, modifier = Modifier.fillMaxWidth().focusRequester(focusRequester) ) }, confirmButton = { TextButton(onClick = { /* Confirm action */ }) { Text("Confirm") } }, dismissButton = { TextButton(onClick = { showDialog = false }) { Text("Cancel") } } ) LaunchedEffect(Unit) { focusRequester.requestFocus() } } } } ``` 这段代码展示了当点击 "Open Input Dialog" 按钮时会打开一个带有文本域的对话框[^1]。一旦对话框被激活,则自动将焦点设置到该文本区域以便立即启动软键盘[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值