2014-12-19 118 views
16

我想將自定義樣式應用於SwitchCompat。更改可打開和關閉狀態的文字。我怎樣才能做到這一點?我無法找到有關如何完成的任何示例。我想在我的styles.xml以下,但顯然我沒有使用正確的父:如何將自定義樣式應用於SwitchCompat

<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> 

編輯

我設法改變可繪製代碼。

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

但我還沒有找到方法來改變開關的文本。以下片段似乎不起作用。也許我需要設置更多的文本屬性?

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的)文本} 屬性控制在標籤顯示的文本開關,而文本 {@link #setTextOff(CharSequence)off}和{@link #setTextOn(CharSequence)}文本 控制拇指上的文本。

編輯2

終於找到代碼溶液。顯然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解決方案

<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的方式。

+0

問題,詢問如何可以做到,或者例如,可以關閉爲「要求場外資源」。請重新說出你的問題,告訴我們你試過的是什麼(它嘗試過)。不要忘記訪問[問](http://stackoverflow.com/help/asking)部分,看看這裏有什麼樣的問題。我會等待你的編輯/刪除。謝謝。 – DroidDev 2014-12-19 08:18:14

回答

10

最後我找到了一種方法在整個應用程序中應用相同的樣式。 我把下面的一行在我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> 
+2

你確定你繼承了其他屬性嗎?那麼