Jetpack Compose组件-文本域(TextField)


Jetpack Compose组件-文本域(TextField)

基础文本域(BasicTextField)

@Composable
fun BasicTextField(
    // 文本域的值
    value: TextFieldValue,
    // 文本改变回调
    onValueChange: (TextFieldValue) -> Unit,
    // 修饰符
    modifier: Modifier = Modifier,
    // 组件使能启用
    enabled: Boolean = true,
    // 组件只读
    readOnly: Boolean = false,
    // 文本样式
    textStyle: TextStyle = TextStyle.Default,
    // 键盘类型,如数字键盘
    keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
    // 功能键事件监听
    keyboardActions: KeyboardActions = KeyboardActions.Default,
    // 单行文本
    singleLine: Boolean = false,
    // 最大行数
    maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
    // 最小行数,1.4新增
    minLines: Int = 1,
    // 虚拟转换,比如使用PasswordVisualTransformation将输入字符转换为密码•••••
    visualTransformation: VisualTransformation = VisualTransformation.None,
    // 计算新文本布局时执行的回调
    onTextLayout: (TextLayoutResult) -> Unit = {},
    // 状态源
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    // 光标画刷
    cursorBrush: Brush = SolidColor(Color.Black),
    // 文本域的装饰
    decorationBox: @Composable (@Composable innerTextField: () -> Unit) -> Unit = @Composable { innerTextField -> innerTextField() }
): Unit

@Composable
fun BasicTextField(
    // 文本域的值
    value: String,
    // 其他参数同上 ...................
): Unit

decorationBox示例

var value by rememberSaveable { mutableStateOf("initial value") }
BasicTextField(
    value = value,
    onValueChange = { value = it },
    decorationBox = { innerTextField ->
        Row(
            Modifier
                .background(Color.LightGray, RoundedCornerShape(percent = 30))
                .padding(16.dp)
        ) {
            Icon(Icons.Default.MailOutline, contentDescription = null)
            Spacer(Modifier.width(16.dp))
            innerTextField()
        }
    }
)

文本域(TextField)

TextField是基于BasicTextField遵循 Material Design 准则的文本域。

@Composable
fun TextField(
    // 文本域的值
    value: TextFieldValue,
    // 文本改变回调
    onValueChange: (TextFieldValue) -> Unit,
    // 修饰符
    modifier: Modifier = Modifier,
    // 组件使能启用
    enabled: Boolean = true,
    // 组件只读
    readOnly: Boolean = false,
    // 文本样式
    textStyle: TextStyle = LocalTextStyle.current,    
    // 文本域标签
    label: (@Composable () -> Unit)? = null,
    // 文本域空白时提示内容
    placeholder: (@Composable () -> Unit)? = null,
    // 文本域头部(左侧)图标
    leadingIcon: (@Composable () -> Unit)? = null,
    // 文本域尾部(右侧)图标
    trailingIcon: (@Composable () -> Unit)? = null,
    // 如果为true,默认情况下标签、底部指示器和尾随图标将以错误颜色显示
    isError: Boolean = false,
    // 虚拟转换,比如使用PasswordVisualTransformation将输入字符转换为密码•••••
    visualTransformation: VisualTransformation = VisualTransformation.None,
    // 键盘类型,如数字键盘
    keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
    // 功能键事件监听
    keyboardActions: KeyboardActions = KeyboardActions(),
    // 单行文本
    singleLine: Boolean = false,
    // 最大行数
    maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
    // 最小行数,1.4新增
    minLines: Int = 1,
    // 状态源
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    // 文本域的形状
    shape: Shape = TextFieldDefaults.TextFieldShape,
    // 文本域的各种颜色
    colors: TextFieldColors = TextFieldDefaults.textFieldColors()
): Unit

@Composable
fun TextField(
    // 文本域的值
    value: String,
    // 其他参数同上 ...................
): Unit

轮廓线文本域(OutlinedTextField)

OutlinedTextField是有轮廓线的文本域。

@Composable
fun OutlinedTextField(
    // 参数与TextField一致,仅默认值不一样
): Unit

文章作者: Vinx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Vinx !
  目录