1

在使用 Android Studio 提供的功能将我的项目迁移到 AndroidXMigrate to 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 键盘

4

3 回答 3

4

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

将您的 Preference 转换为 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);
                }
            });
于 2019-04-25T19:22:47.987 回答
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(应用程序模块):

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将会回来工作!

于 2018-12-11T15:18:16.720 回答
0

[解决了]

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

implementation 'androidx.preference:preference:1.1.0-rc01'
于 2019-07-11T10:04:47.427 回答