2 つのオプションがあり、1 つはプロパティを使用して Muhammad Annaqeeb によって記述されています。
<EditText
android:id="@+id/myTextView"
android:digits="0123456789ABCDEF"
android:inputType="textCapCharacters"/>
他のオプションは、InputFilterと REGEX を使用して、16 進文字のみを許可します。
EditText myTextField = (EditText) findViewById(R.id.myTextView);
InputFilter inputFilterText = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Pattern patern = Pattern.compile("^\\p{XDigit}+$");
StringBuilder sb = new StringBuilder();
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i)) && !Character.isSpaceChar(source.charAt(i)) ) {
//is not(Letter or Digit or space);
return "";
}
//Only allow characters "0123456789ABCDEF";
Matcher matcher = patern.matcher(String.valueOf(source.charAt(i)));
if (!matcher.matches()) {
return "";
}
//Add character to Strinbuilder
sb.append(source.charAt(i));
/*counterForSpace++;
if(counterForSpace>1){
//Restar counter contador
counterForSpace = 0;
//Add space!
sb.append(" ");
}*/
}
//Return text in UpperCase.
return sb.toString().toUpperCase();
}
};
myTextField.setFilters(new InputFilter[] { inputFilterText });
myTextField.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
両方のオプションの結果は次のとおりです。
この関連する回答も確認してください:
https://es.stackoverflow.com/a/211240/95