【问题标题】:How to capitalize every letter in an Android EditText?如何大写Android EditText中的每个字母?
【发布时间】:2012-11-22 05:57:45
【问题描述】:

我有一个编辑文本数组,我是这样制作的:

        inputs[i] = new EditText(this);
        inputs[i].setWidth(376);
        inputs[i].setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
        tFields.addView(inputs[i]);

我希望每个字符都大写。现在,第一个单词的第一个字母是小写的,然后后面的所有字符都是大写的。我可以在用户输入完成后将其转换为大写,但这并不是我真正想要的。有没有办法让这些字段按照我想要的方式运行?

【问题讨论】:

标签: java android android-edittext


【解决方案1】:

您还需要告诉它来自“类”文本:

inputs[i] = new EditText(this);
inputs[i].setWidth(376);
inputs[i].setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
tFields.addView(inputs[i]);

input typebitmask。您可以通过放置 | 来组合标志。 (管道)字符在中间,它代表 OR 逻辑函数,即使在像这样的位掩码中使用时,它也意味着“这个标志和那个另一个标志”。

(此答案与 Robin 的答案相同,但没有“幻数”,这是您可以在代码中放入的最糟糕的事情之一。Android API 具有常量,请使用它们而不是复制值并冒最终破坏代码的风险.)

【讨论】:

  • +1 我同意我们应该使用定义的常量而不是值。
【解决方案2】:

这将使所有字符在书写时变为大写。

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

原答案here

【讨论】:

    【解决方案3】:

    我知道这个问题有点老了,但这里解释了如何用不同的方式来做:

    在 XML 中应用大写

    将以下内容添加到 EditText XML:

    android:inputType="textCapCharacters"
    

    在 Java 中将大写字母作为唯一过滤器应用于 EditText

    这里我们将UpperCase 过滤器设置为EditText 的唯一过滤器。请注意,此方法会删除所有之前添加的过滤器。

    editText.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
    

    在 Java 中为 EditText 的现有过滤器添加大写字母

    要保留已应用的 EditText 过滤器,比如 inputType、maxLength 等,您需要检索应用的过滤器,将大写过滤器添加到这些过滤器,并将它们设置回 EditText。下面是一个例子:

    InputFilter[] editFilters = editText.getFilters();
    InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
    System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
    newFilters[editFilters.length] = new InputFilter.AllCaps();  
    editText.setFilters(newFilters);
    

    【讨论】:

    • 太棒了。你拯救了我的一天。
    【解决方案4】:

    只需使用String.toUpperCase() 方法。

    例子:

    String str = "blablabla";
    editText.setText(str.toUpperCase()); // it will give : BLABLABLA
    

    编辑:

    在你的layout xml 中添加这个属性EditText 标签:

     android:textAllCaps="true"
    

    或:

    如果您希望用户键入的任何内容都为大写,您可以实现 TextWatcher 并使用 EditText addTextChangedListener 添加它,onTextChange 方法上的一个获取用户输入并将其替换为相同大写的文本。

    editText.addTextChangedListener(upperCaseTextWatcher);
    
    final TextWatcher upperCaseTextWatcher = new TextWatcher() {
    
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }
    
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        editText.setText(editText.getText().toString().toUpperCase());
        editText.setSelection(editText.getText().toString().length());
    }
    
    public void afterTextChanged(Editable editable) {
    }
    
    };
    

    【讨论】:

    • 不,儿子。就像我说的那样,我已经这样做了。我需要输入是大写字母,而不仅仅是完成后的字符串。
    • 您的意思是您希望从键盘书写时字母应为大写??
    • 是的,我需要在他们输入第二个字母时将其大写。
    • onTextChanged() 实现,这不是无限循环吗?
    【解决方案5】:

    你可以试试这个:

    android:inputType="textCapCharacters"
    

    它对我有用。 =)

    【讨论】:

      【解决方案6】:

      要将每个句子的第一个单词大写,请使用:

      android:inputType="textCapSentences"

      要将每个单词的第一个字母大写,请使用:

      android:inputType="textCapWords"

      使用每个字符大写:

      android:inputType="textCapCharacters"

      【讨论】:

        【解决方案7】:

        从今天开始

        android:inputType="textCapCharacters"

        【讨论】:

          【解决方案8】:

          您所要做的就是为 EditText 视图设置正确的输入类型:

          editText.inputType == InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
          

          作为替代方案,您可以使用 InputFilter。在这里,我创建了一个 Kotlin 扩展

          fun EditText.allCaps() {
              val newFilters = this.filters.copyOf(this.filters.size + 1)
          
              newFilters[newFilters.size - 1] = InputFilter.AllCaps()
          
              this.filters = newFilters
          }
          

          我更喜欢使用这两种方法。请注意 InputFilter 也适用于硬件键盘,另一方面 InputType 将仅对软键盘有效。

          【讨论】:

          • 这个答案是对公认答案的一个很好的补充。接受答案的解决方案(使用 InputType)确实使软键盘上的字符大写,但用户可以切换回小写并最终输入小写字符。使用这两种解决方案(InputType + InputFilter)效果很好, - 所有字符都是大写的。
          【解决方案9】:

          这样就可以了

              inputs[i] = new EditText(this);
              inputs[i].setWidth(376);
              inputs[i].setInputType(0x00001001);
              tFields.addView(inputs[i]);
          

          0x00001001 对应于“textCapCharacters 常量。

          【讨论】:

          • 请避免使用magic numbers。我建议您编辑您的答案以恢复我的反对票。
          【解决方案10】:

          尝试在您的 xml 中使用这一行代码:

          android:capitalize="sentences"
          

          【讨论】:

            【解决方案11】:

            由于某种原因,添加 xml 在我的设备上不起作用。

            我发现文本过滤器适用于大写,像这样

                EditText editText = (EditText) findViewById(R.id.editTextId);
            
                InputFilter toUpperCaseFilter = new InputFilter() {
                    public CharSequence filter(CharSequence source, int start, int end,
                                               Spanned dest, int dstart, int dend) {
            
                        StringBuilder stringBuilder = new StringBuilder();
            
                        for (int i = start; i < end; i++) {
                            Character character = source.charAt(i);
                            character = Character.toUpperCase(character); // THIS IS UPPER CASING
                            stringBuilder.append(character);
            
                        }
                        return stringBuilder.toString();
                    }
            
                };
            
                editText.setFilters(new InputFilter[] { toUpperCaseFilter });
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-07-06
              • 1970-01-01
              • 2014-12-01
              • 1970-01-01
              • 2011-06-16
              • 2013-06-07
              • 1970-01-01
              相关资源
              最近更新 更多