【问题标题】:How to enable capitalization on the virtual keyboard for an Android Compose TextField?如何在 Android Compose TextField 的虚拟键盘上启用大写?
【发布时间】:2020-01-03 17:48:10
【问题描述】:

我最近开始转向 Compose 以在 Android 中制作我的 UI。到目前为止,我喜欢它,但有时我仍在努力寻找正确的文档。所以如果这个问题很明显,我很抱歉!

在我目前正在开发的应用程序中,我有一个TextField,用于输入消息的标题。一切正常,除了虚拟(屏幕)键盘默认情况下不为第一个字母启用大写锁定。 是否可以在虚拟键盘上为TextField 启用大写锁定,如果可以,如何启用? 只需要TextField 中的第一个字符(或者在句子中,它是标题字段,所以应该只有一句话),如果用户想要更多地大写,欢迎他们自己做:) 所以我基本上要寻找的是 EditText 的 android:inputType="textCapSentences" XML-attribute 的 Compose 版本.

我的TextField 代码如下。一些背景以防万一:TextFieldStack 内,它还包含Text。我用它来显示提示,以防TextField 为空。 StackColumn 内,而 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


【解决方案1】:

你可以使用keyboardOptionsKeyboardCapitalization(仅供参考,我在alpha09):

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

【讨论】:

    【解决方案2】:

    有了1.0.0-beta02,你可以使用keyboardOptions属性:

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

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2022-11-21
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      相关资源
      最近更新 更多