如何将用户插入 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 的文本大写的主要内容,如果未能解决你的问题,请参考以下文章

在Android EditText中,如何强制写大写?

如何给更多的EditText字段一种单行的感觉

如何将图像从画廊插入到 EditTex 视图?

Gboard:在 EditText 上启用 GIF 插入

如何确定在 EditText 中选择了哪些文本? [复制]

同时在editText中提示和文本