Подтвердить что ты не робот

Как установить только числовое значение для EditTextPreference в android?

как установить только числовое значение для EditTextPreference в android. Я хочу, чтобы пользователь вводил номер порта, не уверен, как я могу поставить ограничение там

Я использую этот код, пользователь может ввести любую строку. Хотите ограничить пользователя только наименьшими номерами

   <EditTextPreference 
    android:defaultValue="4444" 
    android:key="port" 
    android:title="Port" 
    android:dependency="service_on"        
    />    
4b9b3361

Ответ 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
         }
     }