如何更改文本字段的输入类型,并在android中仅允许同时输入十六进制?

问题描述 投票:0回答:1

我在应用程序运行时有一个输入字段(EditText),其输入类型为(android:inputType =“ number”)。我的要求是我的应用程序(android)中也有一个复选框,所以我希望复选框被选中,因此文本字段的输入类型更改为“文本”,并且仅从用户处获取十六进制数字

android hex android-textinputedittext
1个回答
0
投票

首先尝试使InputFilter仅选择十六进制字符,其他被拒绝。

InputFilter inputFilterText = new InputFilter() {

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

        Pattern hexPattern = Pattern.compile("^\\p{XDigit}+$"); \\character class \p{XDigit} matches any hexadecimal character.

        StringBuilder myStringbuilder = new StringBuilder();

        for (int i = start; i < end; i++) {

            if (!Character.isSpaceChar(source.charAt(i) && !Character.isLetterOrDigit(source.charAt(i)))) {
                return "";
            }
            Matcher matcher = hexPattern.matcher(String.valueOf(source.charAt(i)));
            if (!matcher.matches()) {
                return "";
            }

            myStringbuilder.append(source.charAt(i));

        }
          return myStringbuilder.toString().toUpperCase();
    }
};

然后检查是否以编程方式基于InputType设置了CheckBox


myCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
          if (buttonView.isChecked()) { 
                edTxt.setFilters(new InputFilter[] { inputFilterText });
                edtText.setInputType(InputType.TYPE_CLASS_TEXT);
          } 
          else 
          {
                edtText.setInputType(InputType.TYPE_CLASS_NUMBER);

          }
    }

});
© www.soinside.com 2019 - 2024. All rights reserved.