使用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"
答案 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(...)
。
...然后瞧!像numeric
和singleLine
这样的旧参数将恢复工作!
答案 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'