เป็นไปได้ไหมที่จะเปลี่ยนไอคอนปุ่มตัวเลือกในกลุ่มปุ่มตัวเลือก Android


95

ฉันต้องการอนุญาตให้ผู้ใช้แอปพลิเคชัน Android ของฉันสามารถตั้งค่าพารามิเตอร์บางอย่างได้ ปุ่มตัวเลือกเหมาะสำหรับสถานการณ์นี้ อย่างไรก็ตามฉันไม่ชอบให้ปุ่มตัวเลือกแสดงผล

สามารถเปลี่ยนไอคอนปุ่มตัวเลือกได้หรือไม่? ตัวอย่างเช่นเป็นไปได้ไหมที่จะสร้างเค้าโครงที่กำหนดเองสำหรับแต่ละแถวและในเค้าโครงนั้นอ้างอิงไอคอนของฉันเองและเปลี่ยนแบบอักษรและคณะ

คำตอบ:


168

ใช่เป็นไปได้ที่คุณต้องกำหนดสไตล์ของคุณเองสำหรับปุ่มตัวเลือกที่ res / values ​​/ styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="android:Theme">
   <item name="android:radioButtonStyle">@style/RadioButton</item>
</style>
<style name="RadioButton" parent="@android:style/Widget.CompoundButton.RadioButton">
   <item name="android:button">@drawable/radio</item>
</style>
</resources>

"radio" ที่นี่ควรเป็น radio.xml ที่สามารถดึงออกมาได้:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_window_focused="false"
        android:drawable="@drawable/radio_hover" />
    <item android:state_checked="false" android:state_window_focused="false"
        android:drawable="@drawable/radio_normal" />
    <item android:state_checked="true" android:state_pressed="true"
        android:drawable="@drawable/radio_active" />
    <item android:state_checked="false" android:state_pressed="true"
        android:drawable="@drawable/radio_active" />
    <item android:state_checked="true" android:state_focused="true"
        android:drawable="@drawable/radio_hover" />
    <item android:state_checked="false" android:state_focused="true"
        android:drawable="@drawable/radio_normal_off" />
    <item android:state_checked="false" android:drawable="@drawable/radio_normal" />
    <item android:state_checked="true" android:drawable="@drawable/radio_hover" />
    </selector>

จากนั้นใช้ธีมที่กำหนดเองกับทั้งแอปหรือกับกิจกรรมที่คุณเลือก

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับธีมและสไตล์โปรดดูที่http://brainflush.wordpress.com/2009/03/15/understand-android-themes-and-styles/ซึ่งเป็นแนวทางที่ดี


13
นอกจากนี้คุณยังสามารถตั้งค่าคุณสมบัติ android: button บนปุ่มตัวเลือกเองแทนที่จะกำหนดสไตล์ที่กำหนดเองแยกต่างหาก
โยนีสามลัน

7
จริง แต่นั่นไม่ใช่แนวปฏิบัติที่ดีนักเนื่องจากโดยปกติคุณจะมีปุ่มตัวเลือกมากกว่าหนึ่งปุ่ม
Konstantin Burov

@KonstantinBurov เกิดอะไรขึ้นถ้าฉันใช้ภาพแพทช์ 9?
Hades

@KonstantinBurov เว้นแต่คุณจะเพิ่มปุ่มโดยทางโปรแกรมซึ่งในกรณีนี้มันยอดเยี่ยมมาก :)
Cornholio

1
สำหรับธีมการสนับสนุนอาจต้องการใช้ <style name = "CustomTheme" parent = "android: Theme"> <item name = "android: radioButtonStyle"> @ style / RadioButton </item> <item name = "radioButtonStyle"> @ style / RadioButton </item> </style>
Dhruv Mevada

30

คุณสามารถใส่รูปภาพที่กำหนดเองในปุ่มเรดิโอได้เหมือนปุ่มปกติ สำหรับการสร้างไฟล์ XML หนึ่งไฟล์ในโฟลเดอร์ที่วาดได้เช่น

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/sub_screens_aus_hl" 
    android:state_pressed="true"/>  
<item android:drawable="@drawable/sub_screens_aus" 
    android:state_checked="true"/>  
<item android:drawable="@drawable/sub_screens_aus" 
    android:state_focused="true" />
<item android:drawable="@drawable/sub_screens_aus_dis" />  
</selector> 

ที่นี่คุณสามารถใช้ 3 ภาพที่แตกต่างกันสำหรับปุ่มเรดิโอ

และใช้ไฟล์นี้เพื่อ RadioButton เช่น:

android:button="@drawable/aus"
android:layout_height="120dp"
android:layout_width="wrap_content" 

13

วิธีที่ง่ายกว่าในการเปลี่ยนเฉพาะปุ่มตัวเลือกคือตั้งค่าตัวเลือกสำหรับดึงขวา

<RadioButton
    ...
    android:button="@null"
    android:checked="false"
    android:drawableRight="@drawable/radio_button_selector" />

และตัวเลือกคือ:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_checkbox_checked" android:state_checked="true" />
    <item android:drawable="@drawable/ic_checkbox_unchecked" android:state_checked="false" /></selector>

นั่นคือทั้งหมด


1
ทางออกที่ดีที่สุดสำหรับกรณีของฉันฉันเปลี่ยน 'drawableRight' เป็น 'button' และเพิ่มช่องว่างภายในตัวเลือก xml
F-1

นี่คือทางออกที่ดีที่สุด ฉันใช้ลักษณะนี้และใช้งานได้ดี แต่หลังจากย้ายไปที่ andoidx android: button = "@ null" ไม่ทำงานและเราจะเห็นไอคอนปุ่มตัวเลือกสองปุ่มสำหรับทุกรายการ! .
maniaq


0

นี่อาจเป็นแนวทางที่รวดเร็ว

ป้อนคำอธิบายภาพที่นี่

ด้วยไอคอนสองไอคอนที่แสดงด้านบนคุณจะมีRadioGroupสิ่งนี้

ป้อนคำอธิบายภาพที่นี่

  • เปลี่ยนการRadioGroupวางแนวเป็นแนวนอน
  • สำหรับแต่ละRadioButton's คุณสมบัติพยายามให้ไอคอนสำหรับButton ภายใต้CompoundButton,
  • ปรับ Padding และขนาด
  • และตั้งค่าแอตทริบิวต์พื้นหลังเมื่อเลือก

0

ในกรณีที่คุณต้องการทำแบบเป็นโปรแกรม

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.