안드로이드 라디오 버튼 그룹에서 라디오 버튼 아이콘을 변경할 수 있습니까?


95

내 안드로이드 애플리케이션 사용자가 일부 매개 변수를 설정할 수 있도록하고 싶습니다. 라디오 버튼은이 상황에 이상적입니다. 그러나 라디오 버튼이 렌더링되는 것을 좋아하지 않습니다.

라디오 버튼 아이콘을 변경할 수 있습니까? 예를 들어 각 행에 대한 사용자 지정 레이아웃을 만들고 해당 레이아웃에서 내 아이콘을 참조하고 글꼴 등을 변경할 수 있습니까?

답변:


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/understanding-android-themes-and-styles/ 를 참조하십시오.


13
별도의 사용자 정의 스타일을 정의하는 대신 라디오 버튼 자체에 android : button 속성을 설정할 수도 있습니다.
Yoni Samlan

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'변화와 선택 XML 일부 패딩 추가
F-1

이것이 최선의 해결책입니다. 나는 이런 방식으로 사용되었고 잘 작동합니다. 그러나 andoidx로 마이그레이션 한 후 android : button = "@ null"은 작동하지 않으며 모든 항목에 대해 두 개의 라디오 버튼 아이콘이 표시됩니다! .
maniaq

1

예 ....`from Xml

android:button="@drawable/yourdrawable" 

및 Java에서

myRadioButton.setButtonDrawable(resourceId or Drawable);

`


0

여기에 빠른 접근 방법이 있습니다.

여기에 이미지 설명 입력

위에 표시된 두 개의 아이콘으로 RadioGroup다음과 같은 것을 갖게됩니다.

여기에 이미지 설명 입력

  • RadioGroup의 방향을 수평으로 변경
  • RadioButton의 속성에 대해 Button 아래에 아이콘을 제공하십시오 CompoundButton.
  • 패딩과 크기를 조정하고
  • 체크되면 Background 속성을 설정합니다.

0

프로그래밍 방식으로 수행하려는 경우

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.