我最近开始迁移到Compose,以便在Android中制作用户界面。到目前为止,我很喜欢它,但是有时我仍在努力寻找正确的文档。因此,很抱歉,这个问题很明显!
在我当前正在使用的应用程序中,我有一个TextField
,用于输入消息的标题。一切正常,除了虚拟(屏幕)键盘默认情况下不启用首字母大写锁定。 是否可以为TextField
启用虚拟键盘上的大写锁定,如果可以,怎么办?仅对TextField
(或句子,这是一个标题字段,因此应该只有一个句子),如果用户想大写,欢迎他们自己写:)所以我基本上想要的是android:inputType="textCapSentences"
的撰写版本EditText的XML属性。
我的TextField
代码如下。某些情况下有帮助:TextField
位于Stack
内部,而Text
也包含TextField
。我用它来显示提示,以防Stack
为空。 Column
在VerticalScroller
内部,而// 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
答案 0 :(得分:4)
您可以使用 keyboardOptions
和 KeyboardCapitalization
(仅供参考,我使用的是 alpha09):
TextField(
...,
keyboardOptions = KeyboardOptions(capitalization = KeyboardCapitalization.Sentences)
)
答案 1 :(得分:0)
通过 1.0.0-beta02
,您可以使用 keyboardOptions
属性:
TextField(
keyboardOptions = KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.Sentences)
)