EditTextPreference не отображает цифровую клавиатуру после переноса проекта на androidx

После переноса моего проекта на AndroidX с использованием функциональности Migrate to AndroidX..., предоставляемой Android Studio, и внесения соответствующих изменений в мои зависимости, чтобы все работало, как предполагалось, я столкнулся с небольшой проблемой, которую не смог решить.

Чтобы установить номер устройства в своем приложении, я использовал EditTextPreference, подобный следующему, определенному в моем pref_screen.xml, который установлен в классе PreferenceFragmentCompat с setPreferencesFromResource(R.xml.pref_screen, string):

<EditTextPreference
            android:icon="@drawable/ic_perm_device_information_black_24dp"
            android:inputType="number"
            android:key="change_device_id"
            android:maxLines="1"
            android:selectAllOnFocus="true"
            android:singleLine="true"
            android:summary="@string/settings_device_id"
            android:title="@string/pref_title_change_device_id" />

Раньше он отображал цифровую клавиатуру для изменения значения, но после перехода на AndroidX он продолжает показывать обычную клавиатуру, как показано на изображении ниже. Я попытался изменить inputType и определить десятичные знаки в xml, но безрезультатно. Что-то изменилось, чтобы установить inputType для клавиатуры после перехода на AndroidX, или я упустил что-то очевидное?

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

EditTextPreference клавиатура


person MasterQueue    schedule 23.11.2018    source источник
comment
попробуйте тип ввода как телефон один раз   -  person Akash Dubey    schedule 23.11.2018
comment
К сожалению, это ничего не изменило   -  person MasterQueue    schedule 23.11.2018
comment
В настоящее время в качестве исправления для этого используется библиотека: github.com/Gericop/Android- Support-Preference-V7-Fix   -  person MasterQueue    schedule 26.11.2018


Ответы (3)


Из ответа здесь: https://stackoverflow.com/a/55461028/7059947

Приведите свое предпочтение к EditTextPreference и используйте setInputType On Bind. Это спасло мой день :)

            EditTextPreference edpPrefernce = (EditTextPreference) pPreference;

            edpPrefernce.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
                @Override
                public void onBindEditText(@NonNull EditText editText) {

                    editText.setInputType(InputType.TYPE_CLASS_NUMBER);
                }
            });
person Skylark    schedule 25.04.2019
comment
Если кому-то нужно десятичное число, используйте вот так editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); - person Husnain Qasim; 24.06.2019

Google еще не исправил это. Вы можете использовать исправление takisoft для этой проблемы:

https://bintray.com/takisoft/android/com.takisoft.preferencex%3Apreferencex/1.0.0

Добавить в build.gradle (проект):

buildscript {
    ...
    repositories {
        maven {
            url  "https://dl.bintray.com/takisoft/android"
        }
    }
    ....
}

Добавить в build.gradle (модуль приложения):

implementation 'com.takisoft.preferencex:preferencex:1.0.0'

Измените импорт в ваших классах и компоненты в ваших ресурсах XML:

androidx.preference.EditTextPreference -> com.takisoft.preferencex.EditTextPreference
androidx.preference.PreferenceCategory -> com.takisoft.preferencex.PreferenceCategory
androidx.preference.PreferenceFragmentCompat -> com.takisoft.preferencex.PreferenceFragmentCompat

В вашем подклассе PreferenceFragmentCompat измените объявление onCreatePreferences(...) на onCreatePreferencesFix(...).

... и вуаля! Старые параметры, такие как numeric и singleLine, вернутся и будут работать!

person fdonadio    schedule 11.12.2018

[Решено]

Добавить в build.gradle (модуль приложения):

implementation 'androidx.preference:preference:1.1.0-rc01'
person Hamza Rashid    schedule 11.07.2019
comment
Как вы указываете inputType с androidx из XML? - person Slion; 02.03.2020