【问题标题】:Capitalize letter in AutoCompleteTextViewAutoCompleteTextView 中的大写字母
【发布时间】:2018-04-06 03:26:48
【问题描述】:

当用户开始在 AutoCompleteTextView 中输入内容时如何将所有字母大写?

我尝试过这种方式:

txtProductInput.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                String upper = txtProductInput.getText().toString().toUpperCase();
                txtProductInput.setText(upper);

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });

但是当用户开始输入应用程序时,系统会中断

txtProductInput.setText(upper);

堆栈跟踪日志:

02-07 13:17:31.708: E/AndroidRuntime(12611): FATAL EXCEPTION: main
02-07 13:17:31.708: E/AndroidRuntime(12611): java.lang.StackOverflowError
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.text.TextUtils.getChars(TextUtils.java:70)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.text.TextUtils.indexOf(TextUtils.java:103)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.text.StaticLayout.generate(StaticLayout.java:182)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.text.DynamicLayout.reflow(DynamicLayout.java:284)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.text.DynamicLayout.<init>(DynamicLayout.java:170)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.widget.TextView.makeSingleLayout(TextView.java:5843)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.widget.TextView.makeNewLayout(TextView.java:5741)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.widget.TextView.checkForRelayout(TextView.java:6280)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.widget.TextView.setText(TextView.java:3547)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.widget.TextView.setText(TextView.java:3405)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.widget.EditText.setText(EditText.java:80)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at android.widget.TextView.setText(TextView.java:3380)
02-07 13:17:31.708: E/AndroidRuntime(12611):    at com.DEM.productionmonitor.LineProduct$1.onTextChanged(LineProduct.java:99)

【问题讨论】:

  • 它到底是怎么破的?什么是堆栈跟踪?
  • 您无法更改 onTextChanged 中的文本,请再次阅读文档

标签: android autocompletetextview


【解决方案1】:

'ZanoOnStack' 给出了一个好主意,所以如果其他人需要,这是一个合适的解决方案:

InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.AllCaps();
txtProductInput.setFilters(FilterArray);

这样可以添加更多其他类型的过滤器。

【讨论】:

    【解决方案2】:
    <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    
        android:inputType="textCapCharacters"
    />
    

    【讨论】:

      【解决方案3】:

      你试过xml布局吗?

      android:textAllCaps="true"

      【讨论】:

      • 这仅适用于 API 级别 14 (android 4.0) 或更高版本。
      【解决方案4】:

      尝试插入

      String upper = s.getText().toString().toUpperCase();
      s.setText(upper);
      

      在afterTextChanged中

      【讨论】:

      • 应用程序在第二行崩溃
      • 字符串上部 = s.getText().toUpperCase(); s.setText(上);
      【解决方案5】:

      对我有用

      @Override
      public void afterTextChanged(Editable arg) {
          String s=arg.toString();
          if(!s.equals(s.toUpperCase())){
              s=s.toUpperCase(); 
              tv.setText(s);
              tv.setSelection(tv.getText().length());
      
          }
      
      }
      

      【讨论】:

      • tv 是你的 EditText,它必须是你方法中的 final
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 2018-07-08
      相关资源
      最近更新 更多