【发布时间】:2020-01-03 17:48:10
【问题描述】:
我最近开始转向 Compose 以在 Android 中制作我的 UI。到目前为止,我喜欢它,但有时我仍在努力寻找正确的文档。所以如果这个问题很明显,我很抱歉!
在我目前正在开发的应用程序中,我有一个TextField,用于输入消息的标题。一切正常,除了虚拟(屏幕)键盘默认情况下不为第一个字母启用大写锁定。 是否可以在虚拟键盘上为TextField 启用大写锁定,如果可以,如何启用? 只需要TextField 中的第一个字符(或者在句子中,它是标题字段,所以应该只有一句话),如果用户想要更多地大写,欢迎他们自己做:) 所以我基本上要寻找的是 EditText 的 android:inputType="textCapSentences" XML-attribute 的 Compose 版本.
我的TextField 代码如下。一些背景以防万一:TextField 在Stack 内,它还包含Text。我用它来显示提示,以防TextField 为空。 Stack 在 Column 内,而 VerticalScroller 又在包裹整个屏幕的 VerticalScroller 内。我正在使用 Android Studio 4.0 Canary 7。
提前非常感谢!
// Model saving the current state of the TextField
val modelTitle = +state{EditorModel()}
// Context (aka the Activity) necessary to get the focus and input method manager
val context = +ambient(ContextAmbient)
// Input Method Manager, to hide the keyboard
val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
TextField {
value = modelTitle.value,
modifier = ExpandedWidth.wraps(Spacing(5.dp)),
textStyle = TextStyle(
color = Color.White,
fontSize = 30.sp
),
onValueChange = {
modelTitle.value = it
},
keyboardType = KeyboardType.Text,
imeAction = ImeAction.Done,
onImeActionPerformed = {
// Get the view currently in focus, or make one
var view = (context as Activity).currentFocus
if(view == null)
view = View(context)
// Use the view to hide the keyboard
imm.hideSoftInputFromWindow(view.windowToken, 0)
},
}
【问题讨论】:
-
您希望文本字段输入值是大写还是带有大写值的虚拟关键字?
-
啊,这确实有点模棱两可:) 我编辑了这个问题以使其更清楚。我想要的是类似于 XML EditText 属性
android:inputType="textCapSentences"的行为。所以仍然允许用户禁用大写锁定并以小写字母开头,但这不是默认设置。谢谢!
标签: android kotlin android-jetpack-compose android-jetpack-compose-text