Почему я не могу заставить EditTextPreference принимать только цифры? - PullRequest
0 голосов
/ 10 октября 2018

ЦЕЛЬ: Используйте EditTextPreference, чтобы получить число, введенное пользователем.

ПРОБЛЕМА: Я использую support.v7.preference и, из чего яМы поняли, что эта библиотека создает проблемы при создании пользовательского DialogPreference ( Как использовать support.v7.preference с AppCompat и потенциальные недостатки ).В любом случае я пытался создать NumberPickerPreference расширение DialogPreference, но получил ClassCastException.

Также я нашел другой подход: программно установить тип ввода объекта EditTextPreference, как показано ниже:

    EditTextPreference pref = (EditTextPreference) findPreference("pref_edit_text");
    if (pref != null) {
       pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
    }

Ни за что, я всегда получаю ClassCastException.

Последний подход, который я пробовал: изменить xml

android:inputType="numberDecimal"
android:digits="0123456789"

или android:numeric="integer"

НетКстати, на Dialog я получаю полную клавиатуру, так что пользователь может писать все.

Есть ли способ правильно заставить EditTextReference вводить только цифры?

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Попробуйте один из них:

android:inputType="numberSigned" 
android:inputType="phone"

РЕДАКТИРОВАТЬ:

android:inputType="numberDecimal|numberSigned"
android:digits="0123456789"

РЕДАКТИРОВАТЬ:

Там´Эта библиотека, которая должна заставить ее работать, если вы хотите попробовать:

https://github.com/Gericop/Android-Support-Preference-V7-Fix

Читая их страницу github, вы можете найти примеры пользовательских входных данных и их пример кода, которыйпохоже на то, что вы делаете сейчас:

"Пример приложения показывает пример настройки (через XML) и запроса (программно) типа ввода EditTextPreference:

<EditTextPreference
    android:inputType="phone"
    android:key="edit_text_test" />

EditTextPreference etPref = (EditTextPreference) findPreference("edit_text_test");
if (etPref != null) {
    int inputType = etPref.getEditText().getInputType();
    // do something with inputType
}
0 голосов
/ 11 октября 2018

Вы можете сделать это, добавив android: inputType = "numberPassword" к вашему XML-файлу. Затем вы можете программно настроить свою пользовательскую клавиатуру в своем java следующим образом:

 yourEditText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD); 

Следующее, что вы можете сделать, это создать пользовательскуюclass:

  private class YourNumericKeyboardMethod extends PasswordTransformationMethod {
    @Override
    public CharSequence getTransformation(CharSequence source, View view) {
        return source;
    }
}

Последний шаг заключается в том, чтобы внедрить его в ваш EditText, чтобы он отображал только цифры:

 yourEditText.setTransformationMethod(new YourNumericKeyboardMethod());

После всех этих шагов вы должны получить клавиатуру, котораяимеет только цифры от 0 до 9

0 голосов
/ 10 октября 2018

Попробуйте установить inputType как число.

android:inputType="number"
...