2014-12-19 13 views
16

Tôi muốn áp dụng kiểu tùy chỉnh cho SwitchCompat. Thay đổi bản vẽ và văn bản cho trạng thái bật và tắt. Làm thế nào tôi có thể đạt được điều này? Tôi không thể tìm thấy bất kỳ ví dụ về cách thực hiện điều này. Tôi đã thử các sau đây trong styles.xml của tôi nhưng dường như tôi không sử dụng phụ huynh phải:Cách áp dụng kiểu tùy chỉnh cho 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> 

Sửa

tôi quản lý để thay đổi drawables trong mã.

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

nhưng tôi chưa tìm thấy cách nào để thay đổi văn bản của nút gạt. Đoạn mã sau dường như không hoạt động. Có lẽ tôi cần phải thiết lập một số thuộc tính văn bản hơn?

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

Theo mã nguồn SwitchCompat cần có sự hỗ trợ cho bật/tắt văn bản: https://android.googlesource.com/platform/frameworks/support/+/421d8baa4a524e1384bcf033360bccaf8d55081d/v7/appcompat/src/android/support/v7/widget/SwitchCompat.java

Các {@link #setText (CharSequence) text} sở hữu kiểm soát văn bản hiển thị trong nhãn cho công tắc, trong khi đó, {@link #setTextOff (CharSequence) off} và {@link #setTextOn (CharSequence) trên} văn bản kiểm soát văn bản trên ngón tay cái.

Chỉnh sửa 2

Cuối cùng tìm ra giải pháp mã. Rõ ràng setShowText() cần được đặt thành true để văn bản xuất hiện trên nút chuyển.

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

và giải pháp 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" /> 

Tôi vẫn muốn biết nếu có một cách để đặt điều này trong styles.xml.

+0

Câu hỏi hỏi làm thế nào nó có thể được thực hiện, hoặc ví dụ, có thể được đóng lại là "yêu cầu tài nguyên ngoài trang web". Vui lòng tái cụm từ câu hỏi của bạn, cho chúng tôi thấy những gì bạn đã thử (nó đã cố gắng). Đừng quên ghé thăm phần [Yêu cầu] (http://stackoverflow.com/help/asking) để xem loại câu hỏi nào được chào đón ở đây. Tôi sẽ chờ đợi để chỉnh sửa/xóa của bạn. Cảm ơn. – DroidDev

Trả lời

10

Cuối cùng, tôi tìm thấy cách áp dụng cùng một kiểu trong toàn bộ ứng dụng của mình. tôi đặt dòng sau trong tôi themes.xml

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

Và sau trong 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

Bạn có chắc là bạn đã kế thừa các thuộc tính khác. Còn