聚焦可组合的文本

时间:2021-05-18 16:33:49

标签: android android-jetpack android-jetpack-compose

我需要使自定义文本编辑器可组合,具有一些自定义行为和外观,这应该与 import 'package:flutter/material.dart'; class Testee extends StatefulWidget { @override _TesteeState createState() => _TesteeState(); } class _TesteeState extends State<Testee> { String loremOne = "Nostrud cillum ea do sit eu sint reprehenderit est tempor amet. Ex minim cupidatat exercitation officia mollit occaecat dolor sint sit aliqua dolore velit exercitation duis. Eu cupidatat pariatur aliquip aliquip ipsum sint ad ullamco irure eiusmod velit mollit ut elit."; String loremTwo = "Fugiat aute eu tempor et consequat nulla."; @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.amberAccent, body: SafeArea( child: Padding( padding: EdgeInsets.all(15.0), child: ListView( children: [ Wrap( direction: Axis.horizontal, spacing: 10.0, children: [ Text(loremOne), Icon(Icons.circle, size: 16), Text(loremOne), Icon(Icons.circle, size: 16), Text(loremTwo), ], ), //may you can compare your wrap with Richtext below RichText( text: TextSpan(children: [ TextSpan(text: loremOne), WidgetSpan(child: Icon(Icons.circle, size: 16)), TextSpan(text: loremOne), WidgetSpan(child: Icon(Icons.circle, size: 16)), TextSpan(text: loremTwo), ])) ], ), ), ), ); } } 可组合完全不同,因此我从 TextField 可组合开始。

我遇到两个问题:单击可组合项时无法打开键盘。并且不要设法让 Text 成为焦点。我相信后者是前者的原因。

这是可组合的简化版本:

Text

尽管同时具有 @ExperimentalComposeUiApi @Composable fun FocusText( modifier: Modifier, text: String ) { val keyboardController = LocalSoftwareKeyboardController.current val focusRequester = remember { FocusRequester() } Text( text = text, modifier = modifier .focusable(true) .focusModifier() .focusRequester(focusRequester) .onFocusChanged { it: FocusState -> println("xxx onFocusChanged: $it") } .clickable { println("xxx onClick") focusRequester.requestFocus() keyboardController?.show() } ) } .focusable(true) 并在 .focusModifier() 中调用 requestFocus(),但可组合对象在点击它时没有获得焦点。 此外,键盘没有打开。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以使用 BasicTextField 代替 Text
它基本上是通过硬件或软件键盘的 EditText,没有装饰提示或占位符。当然可以添加。

类似于:

var value by rememberSaveable { mutableStateOf("edit text") }

BasicTextField(
    value = value,
    onValueChange = { value = it }
)