Có thể thay đổi biểu tượng nút radio trong nhóm nút radio android không


95

Tôi muốn cho phép người dùng ứng dụng Android của mình khả năng thiết lập một số thông số. Nút radio là lý tưởng cho tình huống này. Tuy nhiên, tôi không thích các nút radio được hiển thị.

Có thể thay đổi biểu tượng nút radio không? Ví dụ: có thể tạo bố cục tùy chỉnh cho mỗi hàng và trong bố cục đó tham chiếu biểu tượng của riêng tôi và thay đổi phông chữ et al.

Câu trả lời:


168

Có, bạn có thể phải xác định kiểu riêng của mình cho các nút radio, tại 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' ở đây phải là một trạng thái có thể vẽ được, 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>

Sau đó, chỉ cần áp dụng chủ đề Tùy chỉnh cho toàn bộ ứng dụng hoặc cho các hoạt động bạn chọn.

Để biết thêm thông tin về chủ đề và phong cách, hãy xem http://brainflush.wordpress.com/2009/03/15/und hieu-android- themes-and-styles/ đó là hướng dẫn tốt.


13
Bạn cũng có thể chỉ đặt thuộc tính android: button trên chính nút radio, thay vì xác định một kiểu tùy chỉnh riêng biệt cho nó.
Yoni Samlan

7
Đúng, nhưng đó không phải là cách thực hành quá tốt, vì bạn thường có nhiều hơn thì chỉ cần một nút radio.
Konstantin Burov

@KonstantinBurov thì sao nếu tôi đang sử dụng hình ảnh 9 bản vá?
Hades

@KonstantinBurov Trừ khi bạn đang thêm Buttons lập trình, trong trường hợp này nó là tuyệt vời :)
Cornholio

1
Đối với chủ đề hỗ trợ, bạn có thể muốn sử dụng <style name = "CustomTheme" parent = "android: Theme"> <item name = "android: radioButtonStyle"> @ style / RadioButton </item> <item name = "radioButtonStyle"> @ style / RadioButton </item> </style>
Dhruv Mevada

30

Bạn có thể đặt hình ảnh tùy chỉnh trong nút radio như nút bình thường. để tạo một tệp XML trong thư mục có thể vẽ, ví dụ:

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

Ở đây bạn có thể sử dụng 3 hình ảnh khác nhau cho nút radio

và sử dụng tệp này cho RadioButton như:

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

13

Cách dễ dàng hơn để chỉ thay đổi nút radio là chỉ cần đặt bộ chọn cho bên phải có thể vẽ được

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

Và bộ chọn là:

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

Đó là tất cả


1
Giải pháp tốt nhất, đối với trường hợp của tôi, tôi cũng đã thay đổi 'drawableRight' thành 'nút' và thêm một số padding để xml selector
F-1

Đây là giải pháp tốt nhất. Tôi đã sử dụng theo cách này và nó hoạt động tốt. Nhưng sau khi chuyển sang andoidx android: button = "@ null" không hoạt động và chúng tôi thấy hai biểu tượng nút radio cho mọi mục! .
maniaq

1

vâng .... `từ Xml

android:button="@drawable/yourdrawable" 

và từ Java

myRadioButton.setButtonDrawable(resourceId or Drawable);

`


0

Đây có lẽ là một cách tiếp cận nhanh,

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

Với hai biểu tượng được hiển thị ở trên, bạn sẽ có một RadioGroupcái gì đó như thế này

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

  • thay đổi RadioGrouphướng của thành ngang
  • cho mỗi RadioButtonThuộc tính, hãy thử đặt biểu tượng cho Button bên dưới CompoundButton,
  • điều chỉnh Padding và kích thước,
  • và đặt thuộc tính Nền khi được chọn.

0

Trong trường hợp bạn muốn làm điều đó theo chương trình,

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
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.