我正在使用Android支持库中的PreferenceFragmentCompat
,我遇到了一个奇怪的问题。当片段加载时,我正在使用的SwitchPreference
元素上的开关显示在文本旁边,这是错误的位置。如果我点击一个开关或滚动以使开关不在视野范围内,它会自行修复。注意:这发生在API 25上,但不是API 18。
载入时:
点击或滚动后:
对发生的事情有什么想法?任何帮助表示赞赏!
这就是我所做的:
SwitchPreferenceCompat
invalidate()
强制重绘(希望它能像滚动一样修复它)创建偏好的代码(在Kotlin中):
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....
}
}
答案 0 :(得分:0)
我在Kotlin开发时遇到了同样的问题。目前我有一个临时的解决方法:在所有其他首选项之前创建一个空的首选项,并在其摘要中填充一个长的不可见字符串。
例如,假设我使用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元素的宽度由这个空的Preference的宽度决定。如果&#34; @ string / spaces&#34;足够长(例如多行或至少与整个屏幕一样长),你可以得到正确的宽度。