因为SwitchPreferenceCompat
用一个SwitchCompat
默认情况下小部件,Android Switch 小部件 textOn 和 textOff 在 Lollipop 中不起作用 https://stackoverflow.com/a/27278223/3385212这里也有一个应用程序。和第一个声明
默认情况下,Material 主题下不显示文本,因为开关小部件资源不能很好地处理文本。
还解释了为什么结果看起来一点都不好。
The SwitchPreferenceCompat https://android.googlesource.com/platform/frameworks/support/+/master/v7/preference/src/android/support/v7/preference/SwitchPreferenceCompat.java类本身不提供设置是否应显示开/关文本的可能性。因此,使其发挥作用的一种方法可能是覆盖onBindViewHolder(PreferenceViewHolder)
方法以编程方式设置它。
另一种也许更好的方法是利用主题机制,无论如何,您都必须与首选项兼容库一起使用。您不能直接为视图设置任何属性,但您可以定义要使用的布局android:widgetLayout
。因此,只需创建您自己的偏好主题叠加层
<style name="MyPreferenceThemeOverlay" parent="PreferenceThemeOverlay">
<item name="switchPreferenceCompatStyle">@style/MySwitchPreferenceCompat</item>
</style>
具有您自己的开关偏好风格
<style name="MySwitchPreferenceCompat" parent="Preference.SwitchPreferenceCompat">
<item name="android:widgetLayout">@layout/pref_stack</item>
</style>
使用稍微修改过的默认开关布局 https://android.googlesource.com/platform/frameworks/support/+/master/v7/preference/res/layout/preference_widget_switch_compat.xml
<android.support.v7.widget.SwitchCompat
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/switchWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:focusable="false"
app:showText="true" />
您在代码中应该记住的另一件事是compat功能本身。与使用android.support.v7.preference.SwitchPreferenceCompat
明确地说,您永远不会获得更适合充气机自动识别的较新设备的版本,就像当前唯一可用的替代方案一样android.support.v14.preference.SwitchPreferenceCompat
。不过,这可能需要您做更多的工作。
编辑:这是发帖者实施上述建议的结果,正如他正确提到的那样,结果看起来一点都不好: