ฉันจะวางสไตล์สวิตช์ Android ได้อย่างไร


121

วิดเจ็ตสวิตช์ที่นำมาใช้ใน API 14 มีสไตล์โดยค่าเริ่มต้นด้วยธีม holo ฉันต้องการจัดสไตล์ให้แตกต่างกันเล็กน้อยเปลี่ยนสีและรูปร่างเล็กน้อยด้วยเหตุผลด้านการสร้างแบรนด์ จะไปเกี่ยวกับเรื่องนี้ได้อย่างไร? ฉันรู้ว่ามันต้องเป็นไปได้อย่างที่ฉันเห็นความแตกต่างระหว่าง ICS เริ่มต้นและธีม touchwiz ของ Samsung

ใส่คำอธิบายภาพที่นี่

ฉันคิดว่าฉันต้องการที่จะดึงสถานะบางอย่างและฉันได้เห็นรูปแบบบางอย่างในhttp://developer.android.com/reference/android/R.styleable.htmlด้วย Switch_thumb และ Switch_track ที่ดูเหมือนว่าฉันจะเป็นอย่างไร . ฉันไม่รู้ว่าจะใช้มันอย่างไร

ฉันใช้ ActionbarSherlock ถ้ามันสร้างความแตกต่าง เฉพาะอุปกรณ์ที่ใช้ API v14 ขึ้นไปเท่านั้นที่จะสามารถใช้สวิตช์ได้ทั้งหมด

คำตอบ:


258

คุณสามารถกำหนด drawables ที่ใช้สำหรับพื้นหลังและส่วนของตัวสลับได้ดังนี้:

<Switch
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:thumb="@drawable/switch_thumb"
    android:track="@drawable/switch_bg" />

ตอนนี้คุณต้องสร้างตัวเลือกที่กำหนดสถานะต่างๆสำหรับตัวสลับที่ดึงได้ นี่คือสำเนาจากแหล่งที่มาของ Android:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/switch_thumb_disabled_holo_light" />
    <item android:state_pressed="true"  android:drawable="@drawable/switch_thumb_pressed_holo_light" />
    <item android:state_checked="true"  android:drawable="@drawable/switch_thumb_activated_holo_light" />
    <item                               android:drawable="@drawable/switch_thumb_holo_light" />
</selector>

สิ่งนี้กำหนดนิ้วหัวแม่มือที่วาดได้ซึ่งเป็นภาพที่ย้ายไปอยู่เบื้องหลัง มี เก้าเก้าแพทช์ภาพภาพที่ใช้สำหรับแถบเลื่อน:

เวอร์ชันที่ปิดใช้งาน (เวอร์ชัน xhdpi ที่ Android ใช้อยู่) เวอร์ชันที่ปิดใช้งาน
แถบเลื่อนที่กด: แถบเลื่อนแถบเลื่อนที่กด
ที่เปิดใช้งาน (สถานะเปิด): แถบเลื่อนที่เปิดใช้งาน
เวอร์ชันเริ่มต้น (สถานะปิด):ใส่คำอธิบายภาพที่นี่

นอกจากนี้ยังมีสถานะที่แตกต่างกันสามสถานะสำหรับพื้นหลังที่กำหนดไว้ในตัวเลือกต่อไปนี้:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/switch_bg_disabled_holo_dark" />
    <item android:state_focused="true"  android:drawable="@drawable/switch_bg_focused_holo_dark" />
    <item                               android:drawable="@drawable/switch_bg_holo_dark" />
</selector>

เวอร์ชันที่ปิดใช้งาน: เวอร์ชันเวอร์ชันที่ปิดใช้งาน
ที่เน้น: รุ่นที่เน้น
และเวอร์ชันเริ่มต้น:เวอร์ชันเริ่มต้น

หากต้องการมีสวิตช์สไตล์เพียงแค่สร้างตัวเลือกสองตัวนี้ตั้งค่าเป็นมุมมองสวิตช์ของคุณจากนั้นเปลี่ยนภาพเจ็ดภาพให้เป็นสไตล์ที่คุณต้องการ


1
ขอบคุณรายละเอียดมากภาพตัวเลื่อน 9 แพทช์ที่ปล่อยให้ส่วนหนึ่งของนิ้วโป้งเคลื่อนออกจากแทร็กนั้นมีประโยชน์อย่างยิ่งเพราะฉันไม่สามารถสรุปได้ว่าพวกเขาทำเช่นนั้นได้อย่างไร (แถบเลื่อนเริ่มต้นมีบิตขอบแหลมเคลื่อนผ่านจุดสิ้นสุดของแทร็กเพื่อให้เป็นรูปสี่เหลี่ยมจัตุรัสที่ด้านหนึ่ง)
Glenn.nz

2
มีอีกหนึ่งสถานะที่เป็น <item android: state_checked = "true"> ซึ่งสามารถเปลี่ยนภาพแทร็กเมื่อสวิตช์อยู่ในสถานะ "เปิด" ดังนั้นหากคุณต้องการเปลี่ยนแทร็กเป็น "เปิด" / "ปิด" ให้ใช้สถานะนี้
narangrajeev81

1
ฉันจะจัดรูปแบบสีข้อความสำหรับนิ้วหัวแม่มือได้อย่างไร? หาไม่เจอเลย :(
pojomx

1
@ pojomx. คุณพบวิธีแก้ปัญหาสำหรับ textcolor - คือเปิด / ปิดสีข้อความหรือไม่? ฉันกำลังเผชิญกับปัญหาเดียวกันและติดอยู่ที่จุดเดียวกัน
Smeet

ในการเปลี่ยนสีข้อความ => android: switchTextAppearance = "@ style / mySwitchTextSyle"
Andrew

50

เป็นการตอบกลับโดยละเอียดที่ยอดเยี่ยมโดย Janusz แต่เพื่อประโยชน์ของผู้ที่เข้ามาที่หน้านี้เพื่อดูคำตอบวิธีที่ง่ายกว่าคือที่http://android-holo-colors.com/ (ลิงก์ที่ตายแล้ว) ซึ่งเชื่อมโยงจาก Android Asset Studio

คำอธิบายที่ดีของเครื่องมือทั้งหมดอยู่ที่AndroidOnRocks.com (ไซต์ออฟไลน์ตอนนี้)

อย่างไรก็ตามฉันขอแนะนำให้ทุกคนอ่านคำตอบจาก Janusz เพราะจะทำให้เข้าใจชัดเจนขึ้น ใช้เครื่องมือเพื่อทำของจริงอย่างรวดเร็ว


6
ประหยัดเวลาได้ดี 9-patches, drawables รายการสถานะและอื่น ๆ ทั้งหมดในคลิกเดียว!
สตีฟ

คำตอบนี้มีประโยชน์มากฉันอยากเห็นมันโพสต์เป็นคำถาม "เครื่องมือในการสร้างการควบคุม holo android อย่างง่ายดายด้วยสีที่กำหนดเอง" และคำตอบที่ยอมรับ นักพัฒนาต้องการสิ่งนี้
Rachael

ฉันแน่ใจว่านั่นจะเป็นเครื่องมือที่ยอดเยี่ยม ... ลิงก์ทั้งหมดตายไปแล้วเศร้า
Razvan_TK9692

3

คุณสามารถปรับแต่งรูปแบบวัสดุได้โดยตั้งค่าคุณสมบัติสีต่างๆ ตัวอย่างเช่นธีมแอปพลิเคชันที่กำหนดเอง

<style name="CustomAppTheme" parent="Theme.AppCompat">
    <item name="android:textColorPrimaryDisableOnly">#00838f</item>
    <item name="colorAccent">#e91e63</item>
</style>

ชุดรูปแบบสวิตช์ที่กำหนดเอง

<style name="MySwitch" parent="@style/Widget.AppCompat.CompoundButton.Switch">
    <item name="android:textColorPrimaryDisableOnly">#b71c1c</item>
    <item name="android:colorControlActivated">#1b5e20</item>
    <item name="android:colorForeground">#f57f17</item>
    <item name="android:textAppearance">@style/TextAppearance.AppCompat</item>
</style>

คุณสามารถปรับแต่งสวิทช์แทร็กและสลับนิ้วหัวแม่มือเหมือนภาพด้านล่างได้โดยกำหนด xml drawables สำหรับข้อมูลเพิ่มเติมhttp://www.zoftino.com/android-switch-button-and-custom-switch-examples

แทร็กสวิตช์ที่กำหนดเองและนิ้วหัวแม่มือ


1

ทางเลือกอื่นและง่ายกว่ามากคือใช้รูปทรงแทน 9 แพทช์ มีการอธิบายไว้แล้วที่นี่: https://stackoverflow.com/a/24725831/512011


idk เครื่องมือที่กล่าวถึงในคำตอบของ kishu27 นั้นเร็วกว่ามากสำหรับการเปลี่ยนสีเนื่องจากมันสร้างไฟล์ทั้งหมดให้คุณ ฉันเดาว่าถ้าคุณต้องการปรับแต่งรูปร่างนอกเหนือจากสีแม้ว่าจะเร็วกว่านี้
JStephen

เครื่องมือนี้ยอดเยี่ยมมาก แต่จริงๆแล้วฉันไม่ชอบความคิดที่ว่าถ้าคุณต้องการเพียงแค่เปลี่ยนสีของสิ่งที่คุณต้องการเพื่อสร้างภาพจำนวนมาก นอกจากนี้หากคุณใช้รูปทรงคุณสามารถมีสีต่างๆสำหรับตำแหน่งปิด / เปิดสวิตช์ได้
netpork

จริงถ้าคุณไม่แน่ใจเหมือนฉันและเปลี่ยนสีไปเรื่อย ๆ จนกว่าคุณจะพบสีที่คุณชอบมันจะเร็วกว่านี้มากโชคดีสำหรับฉันที่มีคนอื่นรับผิดชอบในการเลือกสี :)
JStephen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.