在点击

时间:2017-12-14 21:12:46

标签: android android-fragments kotlin android-support-library android-preferences

我正在使用Android支持库中的PreferenceFragmentCompat,我遇到了一个奇怪的问题。当片段加载时,我正在使用的SwitchPreference元素上的开关显示在文本旁边,这是错误的位置。如果我点击一个开关或滚动以使开关不在视野范围内,它会自行修复。注意:这发生在API 25上,但不是API 18。

载入时:

Switches in incorrect position

点击或滚动后:

Switches in correct position

对发生的事情有什么想法?任何帮助表示赞赏!

这就是我所做的:

  1. 切换到SwitchPreferenceCompat
  2. 更改(并最终删除) styles.xml
  3. 中的自定义主题
  4. 创建了一小组未填满屏幕的开关。有趣的是,如果屏幕没有填充偏好,布局看起来很棒。
  5. 在Fragment的视图中调用invalidate()强制重绘(希望它能像滚动一样修复它)
  6. 在文本中添加了一堆空格,以强制它为全宽,但不起作用(虽然实际上文字就像一堆句子......确实有效lol)
  7. 创建偏好的代码(在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....
        }
    }
    

1 个答案:

答案 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;足够长(例如多行或至少与整个屏幕一样长),你可以得到正确的宽度。