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