如何为Android Compose TextField在虚拟键盘上启用大写?

时间:2020-01-03 17:48:10

标签: android kotlin android-jetpack-compose

我最近开始迁移到Compose,以便在Android中制作用户界面。到目前为止,我很喜欢它,但是有时我仍在努力寻找正确的文档。因此,很抱歉,这个问题很明显!

在我当前正在使用的应用程序中,我有一个TextField,用于输入消息的标题。一切正常,除了虚拟(屏幕)键盘默认情况下不启用首字母大写锁定。 是否可以为TextField启用虚拟键盘上的大写锁定,如果可以,怎么办?仅对TextField(或句子,这是一个标题字段,因此应该只有一个句子),如果用户想大写,欢迎他们自己写:)所以我基本上想要的是android:inputType="textCapSentences"的撰写版本EditText的XML属性。

我的TextField代码如下。某些情况下有帮助:TextField位于Stack内部,而Text也包含TextField。我用它来显示提示,以防Stack为空。 ColumnVerticalScroller内部,而// 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) }, } 在包装整个屏幕的 let progressCounter = 0; request1.pipe( tap(_ => progressCounter = 0.33), concatMap(n => request2(n).pipe( tap(_ => progressCounter = 0.66), concatMap(n => request3(n) .pipe(tap(_ => progressCounter = 1))) )) ); 内部。我正在使用Android Studio 4.0 Canary 7。

非常感谢!

stdin

2 个答案:

答案 0 :(得分:4)

您可以使用 keyboardOptionsKeyboardCapitalization(仅供参考,我使用的是 alpha09):

TextField(
    ...,
    keyboardOptions = KeyboardOptions(capitalization = KeyboardCapitalization.Sentences)
)

答案 1 :(得分:0)

通过 1.0.0-beta02,您可以使用 keyboardOptions 属性:

   TextField(
         keyboardOptions = KeyboardOptions.Default.copy(
                capitalization = KeyboardCapitalization.Sentences)
   )