Android 开关首选项布局在打开前不正确
我正在使用Android支持库中的Android 开关首选项布局在打开前不正确,android,android-fragments,kotlin,android-support-library,android-preferences,Android,Android Fragments,Kotlin,Android Support Library,Android Preferences,我正在使用Android支持库中的PreferenceFragmentCompat,我遇到了一个奇怪的问题。加载片段时,我正在使用的SwitchPreference元素上的开关显示在文本旁边,这是错误的位置。如果我点击一个开关或滚动,使开关不在视野内,它会自行修复。注:这发生在API 25上,而不是API 18上 装载时: 轻触或滚动后: 你有什么想法吗?感谢您的帮助 以下是我所做的: 切换到SwitchPreferenceCompat 更改(并最终删除)style.xml中的自定义主题 创
PreferenceFragmentCompat
,我遇到了一个奇怪的问题。加载片段时,我正在使用的SwitchPreference
元素上的开关显示在文本旁边,这是错误的位置。如果我点击一个开关或滚动,使开关不在视野内,它会自行修复。注:这发生在API 25上,而不是API 18上
装载时:
轻触或滚动后:
你有什么想法吗?感谢您的帮助
以下是我所做的:
SwitchPreferenceCompat
invalidate()
,强制重画(希望它能像滚动一样修复)class PreferencesFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener {
override fun onCreatePreferences(bundle: Bundle?, s: String?) {
val deviceCategory = PreferenceCategory(activity)
deviceCategory.title = activity.getString(R.string.preferences_Device_Defaults)
preferenceScreen.addPreference(deviceCategory)
val clockPref = SwitchPreference(activity)
clockPref.title = activity.getString(R.string.preferences_Automatic_clock_synchronization)
clockPref.isChecked = true
clockPref.key = "clockSync"
deviceCategory.addPreference(clockPref)
// Add more preferences....
val unitCategory = PreferenceCategory(activity)
unitCategory.title = activity.getString(R.string.preferences_Unit_Defaults)
preferenceScreen.addPreference(unitCategory)
val runCellTestOnConnect = SwitchPreference(activity)
runCellTestOnConnect.title = activity.getString(R.string.preferences_Cell_network_check)
runCellTestOnConnect.isChecked = true
runCellTestOnConnect.key = "runCellTestOnConnect"
unitCategory(runCellTestOnConnect)
// Add more preferences....
}
}
我在科特林开发时遇到了完全相同的问题。目前我有一个临时解决办法:在所有其他首选项之前创建一个空首选项,并在其摘要中填充一个长的不可见字符串 例如,假设我正在使用一个XML文件来构造首选项:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="pref_static_field_key"
android:persistent="false"
android:selectable="false"
android:summary="@string/spaces" />
<!-- Other Preferences -->
</PreferenceScreen>
然后您会注意到,以下SwitchPreference元素的宽度由该空首选项的宽度决定。如果“@string/spaces”足够长(例如多行或至少与整个屏幕一样长),则可以获得正确的宽度