将项目迁移到androidx后,EditTextPreference不显示数字键盘

时间:2018-11-23 12:35:18

标签: android android-preferences androidx edittextpreference

使用Android Studio提供的Migrate to AndroidX...功能将项目迁移到AndroidX,并相应更改了依存关系以使所有内容按预期方式运行后,我遇到了一个小问题,但我没有能够解决。

要在我的应用程序中设置设备编号,我使用了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中定义小数,但无济于事。迁移到AndroidX后是否进行了一些更改以设置键盘的inputType?或者我缺少明显的内容吗?

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

EditTextPreference keyboard

3 个答案:

答案 0 :(得分:1)

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(...)

...然后瞧!像numericsingleLine这样的旧参数将恢复工作!

答案 1 :(得分:1)

从这里的答案: https://stackoverflow.com/a/55461028/7059947

将您的首选项设置为EditTextPreference,并在绑定时使用setInputType。 这挽救了我的一天:)

            EditTextPreference edpPrefernce = (EditTextPreference) pPreference;

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

                    editText.setInputType(InputType.TYPE_CLASS_NUMBER);
                }
            });

答案 2 :(得分:0)

[已解决]

添加到build.gradle(应用模块):

implementation 'androidx.preference:preference:1.1.0-rc01'