Вопрос по android-layout, android – Как установить EditText для ввода только шестнадцатеричных чисел?

15

Я бы добавил в этот код элемент управления EditText, чтобы он принимал только шестнадцатеричные числа. Как мне это сделать?

bin = (EditText)findViewById(R.id.editText02);
hex = (EditText)findViewById(R.id.editText3);
dec = (EditText)findViewById(R.id.editText1);
oct = (EditText)findViewById(R.id.editText04);
Чтобы получить контроль над тем, что пользователь может ввести, добавьтеTextWatcher на ваши EditTexts. waqaslam
пользовательское свойство setInputType () для edittext .. RajaReddy PolamReddy

Ваш Ответ

3   ответа
39

t:

<EditText
android:digits="0123456789ABCDEF"
android:inputType="textCapCharacters"
/>

Первый атрибут позволяет вводить только с этими цифрами. Любой другой ввод отклоняется и не отображается. Второй атрибут использует заглавные буквы.

кредит идет к этому сообщению в блоге: http://mobile.antonio081014.com/2012/04/how-to-let-input-of-edittext-only-be.html

Добавление android: maxLength = "2", если я напишу "TT11", тогда EditText останется пустым, вместо того, чтобы сохранять "11".
0

один из которых описан Мухаммедом Аннакибом с использованием свойств:

<EditText
        android:id="@+id/myTextView"
        android:digits="0123456789ABCDEF"
        android:inputType="textCapCharacters"/>

Другой вариант будет использоватьInputFilter и REGEX, чтобы разрешить только шестнадцатеричные символы:

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);

оба варианта имеют в результате:

enter image description here

Проверьте этот связанный ответ тоже:

https://es.stackoverflow.com/a/211240/95

introducir la descripción de la imagen aquí

3

однако я предпочитаю использовать пользовательские фильтры. таким образом, более простой способ - использовать InputFilter и контролировать каждый символ на лету, см. пример ниже, надеюсь, это поможет

    import android.text.InputFilter;
    import android.text.InputType;

    EditText input_moodMsg; 
    // initialize this edittext etc etc
    //....
    // here comes the filter to control input on that component
    InputFilter inputFilter_moodMsg = new InputFilter() {
                @Override
                public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) {

                    if (source.length()>44) return "";// max 44chars

// Here you can add more controls, e.g. allow only hex chars etc

                    for (int i = start; i < end; i++) { 
                         if (!Character.isLetterOrDigit(source.charAt(i)) && !Character.isSpaceChar(source.charAt(i))
                                 && source.charAt(i)!='-'
                                 && source.charAt(i)!='.'
                                 && source.charAt(i)!='!'
                                 ) { 
                             return "";     
                         }     
                    }
                    return null;   
                }
            };
            input_moodMsg.setFilters(new InputFilter[] { inputFilter_moodMsg });
            input_moodMsg.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

Похожие вопросы