Làm cách nào để tạo kiểu cho một Switch Android?


121

Tiện ích chuyển đổi được giới thiệu trong API 14 được tạo kiểu theo mặc định với chủ đề holo. Tôi muốn tạo kiểu cho nó hơi khác một chút, thay đổi màu sắc và hình dạng một chút vì lý do xây dựng thương hiệu. Làm thế nào để một người đi về điều này? Tôi biết nó phải có thể, vì tôi đã thấy sự khác biệt giữa ICS mặc định và chủ đề touchwiz của Samsung

nhập mô tả hình ảnh ở đây

Tôi cho rằng tôi sẽ cần một số thiết bị có thể kéo trạng thái và tôi đã thấy một vài kiểu trong http://developer.android.com/reference/android/R.styleable.html với Switch_thumb và Switch_track trông giống như những gì tôi có thể đang theo đuổi . Tôi chỉ không biết làm thế nào để sử dụng chúng.

Tôi đang sử dụng ActionbarSherlock nếu điều đó tạo ra sự khác biệt. Tất nhiên, chỉ những thiết bị chạy API v14 trở lên mới có thể sử dụng công tắc.

Câu trả lời:


258

Bạn có thể xác định các phần có thể kéo được sử dụng cho nền và phần trình chuyển đổi như sau:

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

Bây giờ bạn cần tạo một bộ chọn xác định các trạng thái khác nhau cho bộ chuyển đổi có thể vẽ được. Đây là các bản sao từ các nguồn 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>

Điều này xác định ngón tay cái có thể vẽ được, hình ảnh được di chuyển trên nền. Có bốn hình ảnh chín bản được sử dụng cho thanh trượt:

Phiên bản đã hủy kích hoạt (phiên bản xhdpi mà Android đang sử dụng) Phiên bản đã hủy kích hoạt
Thanh trượt được nhấn: Thanh trượt được nhấn
Thanh trượt đã kích hoạt (trạng thái bật): Thanh trượt được kích hoạt
Phiên bản mặc định (trạng thái tắt):nhập mô tả hình ảnh ở đây

Ngoài ra còn có ba trạng thái khác nhau cho nền được xác định trong bộ chọn sau:

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

Phiên bản đã hủy kích hoạt: Phiên bản Phiên bản đã hủy kích hoạt
tập trung: Phiên bản tập trung
Và phiên bản mặc định:phiên bản mặc định

Để có một công tắc theo kiểu, chỉ cần tạo hai bộ chọn này, đặt chúng thành Chế độ xem chuyển đổi của bạn và sau đó thay đổi bảy hình ảnh theo kiểu bạn muốn.


1
Cảm ơn rất chi tiết, hình ảnh thanh trượt 9 bản vá cho phép một phần của ngón tay cái di chuyển ra khỏi đường đua đặc biệt hữu ích vì tôi không thể tìm hiểu cách họ làm điều đó. (thanh trượt mặc định có các bit nhọn cạnh di chuyển qua phần cuối của bài hát để làm cho một kết thúc vuông ở một bên)
Glenn.nz

2
Còn một trạng thái nữa là <item android: state_checked = "true"> có thể thay đổi hình ảnh bản nhạc khi công tắc ở trạng thái "bật". vì vậy nếu bạn muốn thay đổi bản nhạc trên "bật" / "tắt", hãy sử dụng trạng thái này.
narangrajeev81

1
Làm cách nào để tạo kiểu màu văn bản cho ngón tay cái? tôi không thể tìm thấy nó ở bất cứ đâu :(
pojomx

1
@ pojomx. Bạn có tìm thấy giải pháp nào cho màu văn bản - tức là bật / tắt màu văn bản không? Tôi đang đối mặt với cùng một vấn đề và mắc kẹt ở cùng một điểm.
Smeet

Để thay đổi màu văn bản => android: switchTextAppearance = "@ style / mySwitchTextSyle"
Andrew

50

Đó là một câu trả lời chi tiết tuyệt vời của Janusz. Nhưng chỉ vì lợi ích của những người đang truy cập trang này để tìm câu trả lời, cách dễ dàng hơn là tại http://android-holo-colors.com/ (liên kết chết) được liên kết từ Android Asset Studio

Mô tả tốt về tất cả các công cụ có tại AndroidOnRocks.com (trang web hiện đang ngoại tuyến)

Tuy nhiên, tôi thực sự khuyên mọi người nên đọc câu trả lời từ Janusz vì nó sẽ giúp hiểu rõ hơn. Sử dụng công cụ để thực hiện công việc nhanh chóng


6
Tiết kiệm thời gian tuyệt vời. 9-bản vá, danh sách nhà nước có thể vẽ, v.v. tất cả chỉ trong một cú nhấp chuột!
Steve

Câu trả lời này rất tiện dụng, tôi muốn xem nó được đăng dưới dạng câu hỏi về "công cụ để dễ dàng tạo điều khiển holo android bằng màu tùy chỉnh" và câu trả lời được chấp nhận. Các nhà phát triển cần điều này.
Rachael

Tôi chắc rằng đó sẽ là một công cụ tuyệt vời ... tất cả các liên kết đều đã chết, thật đáng buồn
Razvan_TK9692

3

Bạn có thể tùy chỉnh kiểu vật liệu bằng cách đặt các thuộc tính màu khác nhau. Ví dụ: chủ đề ứng dụng tùy chỉnh

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

Chủ đề chuyển đổi tùy chỉnh

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

Bạn có thể tùy chỉnh theo dõi chuyển đổi và chuyển đổi ngón tay cái như hình ảnh bên dưới bằng cách xác định các tệp có thể kéo xml. Để biết thêm thông tin http://www.zoftino.com/android-switch-button-and-custom-switch-examples

công tắc tùy chỉnh theo dõi và ngón tay cái


1

Một cách khác và dễ dàng hơn nhiều là sử dụng các hình dạng thay vì 9 miếng vá. Nó đã được giải thích ở đây: https://stackoverflow.com/a/24725831/512011


idk, công cụ được đề cập trong câu trả lời của kishu27 nhanh hơn nhiều để chỉ thay đổi màu sắc vì nó tạo ra tất cả các tệp cho bạn. Tôi đoán nếu bạn muốn tùy chỉnh hình dạng ngoài màu sắc mặc dù điều này có thể nhanh hơn.
JStephen

Công cụ này thực sự tuyệt vời, mặc dù, thành thật mà nói, tôi không thích ý tưởng rằng nếu bạn muốn chỉ thay đổi màu của thứ gì đó bạn cần để tạo ra một loạt hình ảnh. Ngoài ra, nếu bạn đang sử dụng hình dạng, bạn có thể có các màu khác nhau cho các vị trí chuyển đổi tắt / bật.
netpork

đúng, nếu bạn đang lưỡng lự như tôi và tiếp tục thay đổi màu sắc cho đến khi bạn tìm thấy một trong những bạn thích thì đây là nhanh hơn nhiều, may mắn cho tôi một người nào khác có trách nhiệm chọn các màu sắc :)
JStephen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.