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

问题描述 投票:0回答:2

在使用Android Studio提供的Migrate to AndroidX...功能将我的项目迁移到AndroidX并相应地更改了我的依赖项以使所有内容运行时,我遇到了一个我无法解决的小问题。

要在我的应用程序中设置设备编号,我使用了一个EditTextPreference,就像我在pref_screen.xml中定义的一样,它是在带有setPreferencesFromResource(R.xml.pref_screen, string)的PreferenceFragmentCompat类中设置的:

<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

android android-preferences androidx edittextpreference
2个回答
2
投票

从这里的答案: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);
                }
            });

1
投票

谷歌还没有解决这个问题。你可以使用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(app模块):

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将重新开始工作!

© www.soinside.com 2019 - 2024. All rights reserved.