Как установить только числовое значение для EditTextPreference в android?
как установить только числовое значение для EditTextPreference в android.
Я хочу, чтобы пользователь вводил номер порта, не уверен, как я могу поставить ограничение там
Я использую этот код, пользователь может ввести любую строку. Хотите ограничить пользователя только наименьшими номерами
<EditTextPreference
android:defaultValue="4444"
android:key="port"
android:title="Port"
android:dependency="service_on"
/>
Ответы
Ответ 1
Виджеты EditTextPreference должны иметь те же атрибуты, что и обычный EditText, поэтому используйте:
android:inputType="number"
Или, более конкретно, используйте:
android:inputType="numberDecimal"
android:digits="0123456789"
так как вы хотите ограничить ввод только номером порта.
Ответ 2
Я использую библиотеку androidX, потому что в этой библиотеке есть возможность настроить тип ввода диалога EditTextPreference. AndroidX представляет собой значительное улучшение по сравнению с оригинальной библиотекой поддержки Android, поэтому предлагается, чтобы все использовали эту библиотеку.
Подробнее об AndroidX вы можете прочитать здесь.
Вот мой код, где я использую EditTextPreference внутри метода onCreatePreference:
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preference, rootKey);
androidx.preference.EditTextPreference editTextPreference = getPreferenceManager().findPreference("use_key_from_editTextPreference_in_xml_file");
editTextPreference.setOnBindEditTextListener(new androidx.preference.EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
}
});
}
После использования этого кода и нажатия на editTextPreference откроется диалоговое окно, и тип ввода с клавиатуры будет только числовым.
Ответ 3
Используя библиотеку androidx.preference
, поскольку androidx.preference:preference:1.1.0-alpha02
, который выпущен в 2018.12.17, библиотека library добавляет интерфейс EditTextPreference.OnBindEditTextListener
, который позволяет настраивать текст EditText, отображаемый в соответствующем диалоге после привязки диалога.
Так что в этом случае все, что вам нужно сделать, это добавить код Kotlin ниже.
editTextPreference.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER
}
Ответ 4
Получите доступ к методам EditTextPreference EditText с помощью getEditText и установите тип ввода
EditTextPreference pref = (EditTextPreference) findPreference("pref_edit_text");
if (pref != null) {
pref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
}
К сожалению, официальная библиотека android.support.v7.preference скрывает доступ к getEditText, но есть библиотека исправлений, которая решает эту проблему.
Ответ 5
Кодлин Котлин, который работал для меня:
Здесь "editTextPrefSleepTime" является ключом EditTextPreference, который я установил в XML файле.
private var editTextPrefSleepTime: EditTextPreference? = null
override fun onStart() {
super.onStart()
editTextPrefSleepTime = preferenceManager.findPreference("editTextPrefSleepTime")
editTextPrefSleepTime?.setOnBindEditTextListener {
it.inputType = InputType.TYPE_CLASS_NUMBER
}
}