在使用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"
从这里的答案: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);
}
});
谷歌还没有解决这个问题。你可以使用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(...)
。
......瞧!旧的参数,如numeric
和singleLine
将重新开始工作!