如何将自定义样式应用于SwitchCompat

我想将自定义样式应用于SwitchCompat。 更改绘图和文本的开关状态。 我怎样才能做到这一点? 我找不到任何这方面的例子。 我在我的styles.xml中尝试以下,但显然我没有使用正确的父:

<style name="Switch" parent="android:Widget.AppCompat.Widget.CompoundButton.SwitchCompat"> <item name="android:textOn">@string/common_yes</item> <item name="android:textOff">@string/common_no</item> <item name="android:thumb">@drawable/btn_switch_selector</item> <item name="android:track">@drawable/btn_switch_bg_selector</item> </style> 

编辑

我设法改变代码中的drawable。

 switchView.setThumbResource(R.drawable.btn_switch_selector); switchView.setTrackResource(R.drawable.btn_switch_bg_selector); 

但我还没有find方法来改变开关的文字。 下面的代码似乎不工作。 也许我需要设置更多的文本属性?

 switchView.setTextOn(context.getString(R.string.common_yes)); switchView.setTextOff(context.getString(R.string.common_no)); 

根据SwitchCompat源代码应该支持开/关文本: https : //android.googlesource.com/platform/frameworks/support/+/421d8baa4a524e1384bcf033360bccaf8d55081d/v7/appcompat/src/android/support/v7/widget/ SwitchCompat.java

{@link #setText(CharSequence)text}属性控制开关标签中显示的文本,而文本控制文本上的{@link #setTextOff(CharSequence)off}和{@link #setTextOn(CharSequence)在拇指上。

编辑2

终于find了一个解决scheme。 显然, setShowText()需要设置为true以使文本出现在交换机上。

 switchView.setTextOn(context.getString(R.string.common_yes)); switchView.setTextOff(context.getString(R.string.common_no)); switchView.setShowText(true); switchView.setThumbResource(R.drawable.btn_switch_selector); switchView.setTrackResource(R.drawable.btn_switch_bg_selector); 

和XML解决scheme

 <android.support.v7.widget.SwitchCompat android:id="@+id/view_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:thumb="@drawable/btn_switch_selector" app:track="@drawable/btn_switch_bg_selector" android:textOn="@string/common_yes" android:textOff="@string/common_no" app:showText="true" /> 

我仍然想知道是否有方法把它放在styles.xml

Solutions Collecting From Web of "如何将自定义样式应用于SwitchCompat"

最后,我find了一种在整个应用程序中应用相同样式的方法。 我把我的themes.xml的以下行

 <item name="switchStyle">@style/Custom.Widget.SwitchCompat</item> 

以下在我的styles.xml

 <style name="Custom.Widget.SwitchCompat" > <item name="android:thumb">@drawable/btn_switch_selector</item> <item name="track">@drawable/btn_switch_bg_selector</item> <item name="showText">true</item> <item name="android:textOn">@string/common_yes</item> <item name="android:textOff">@string/common_no</item> </style> 

风格应该包括父母

 <item name="switchStyle">@style/MySwitchCompat</item> <style name="MySwitchCompat" parent="Widget.AppCompat.CompoundButton.Switch"> <item name="android:textColor">@color/accent</item> <item name="android:fontFamily">sans-serif-light</item> </style>