如何将用户插入 EditText 的文本大写
Posted
技术标签:
【中文标题】如何将用户插入 EditText 的文本大写【英文标题】:How can I capitalize the text that user inserts into EditText 【发布时间】:2022-01-24 05:58:25 【问题描述】:我是 android 新手,我想知道如何将用户输入到 EditText 中的文本大写
【问题讨论】:
android:inputType="textCapCharacters"
in EditText
或者,使用文本更改侦听器并通过代码大写
【参考方案1】:
根据 cmets 的建议,您可以使用
android:inputType="textCapCharacters"
在您的 XML 中。
但用户仍然可以根据需要将其更改为小写。
如果您的要求是必须将用户绑定到大写,那么您必须在课堂上使用 TextWatcher。当用户输入任何文本时,我们会将其更改为大写并设置为edittext。
你可以这样做:
TextWatcher textWatcher = new TextWatcher()
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2)
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
editText.removeTextChangedListener(this);
editText.setText(charSequence.toString().toUpperCase());
editText.setSelection(i2);
editText.addTextChangedListener(this);
@Override
public void afterTextChanged(Editable editable)
;
在你的 onCreate 的 Activity 中
editText.addTextChangedListener(textWatcher);
【讨论】:
【参考方案2】:尝试阅读有关InputType.TYPE_TEXT_FLAG_CAP_WORDS 和此example 的信息
或使用toUpperCase()
【讨论】:
【参考方案3】:如果你在 Kotlin 中使用 String,你可以使用 capitalize() 扩展
例子:
val lowerCase = "some text"
val upperCase = lowerCase.capitalize() // Result: "Some text"
在您的情况下,您可以将该检查应用于 TextWatcher 中的文本:
TextWatcher textWatcher = new TextWatcher()
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2)
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
editText.removeTextChangedListener(this);
editText.setText(charSequence.toString().capitalize());
editText.setSelection(i2);
editText.addTextChangedListener(this);
@Override
public void afterTextChanged(Editable editable)
;
然后:
editText.addTextChangedListener(textWatcher);
这里可以看到capitalize方法的内部实现:
public actual fun String.capitalize(): String
return capitalize(Locale.getDefault())
public fun String.capitalize(locale: Locale): String
if (isNotEmpty())
val firstChar = this[0]
if (firstChar.isLowerCase())
return buildString
val titleChar = firstChar.titlecaseChar()
if (titleChar != firstChar.uppercaseChar())
append(titleChar)
else
append(this@capitalize.substring(0, 1).uppercase(locale))
append(this@capitalize.substring(1))
return this
此方法返回此字符串的副本,其第一个字母使用默认语言环境的规则进行标题化,如果它为空或已经以标题大小写字母开头,则返回原始字符串。 字符的标题大小写通常与其大写相同,但有几个例外。具有特殊标题大小写形式的特定字符列表取决于底层平台。
【讨论】:
【参考方案4】:你只需要在EditText中添加这一行
android:inputType="textCapCharacters"
你会得到如图所示的结果
【讨论】:
以上是关于如何将用户插入 EditText 的文本大写的主要内容,如果未能解决你的问题,请参考以下文章