라디오 버튼의 원 색상 변경


158

프로젝트 중 하나에서 RadioButton 원의 색상을 변경하고 싶습니다 . 설정 할 속성을 이해할 수 없습니다. 내가 가지고있는 배경색은 검은 색이므로 보이지 않습니다. 원의 색상을 흰색으로 설정하고 싶습니다.


이 링크를 참조하십시오 : heliodorj.blogspot.in/2009/04/…
Android 개발자

라디오 버튼에 두 개의 이미지를 사용하십시오. 하나는 선택되고 다른 하나는 선택되지 않습니다.
SAURABH_12

답변:


288

더 간단한 방법은 buttonTint 색상을 설정하는 것입니다.

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:checked="true"
    android:buttonTint="@color/your_color"/>

values ​​/ colors.xml 에서이 경우에는 붉은 색을 넣으십시오.

<color name="your_color">#e75748</color>

결과:

컬러 안드로이드 라디오 버튼

코드로 처리하려면 (api 21 이상) :

if(Build.VERSION.SDK_INT>=21)
{

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{

                    new int[]{-android.R.attr.state_enabled}, //disabled
                    new int[]{android.R.attr.state_enabled} //enabled
            },
            new int[] {

                    Color.BLACK //disabled
                    ,Color.BLUE //enabled

            }
        );                       


    radio.setButtonTintList(colorStateList);//set the color tint list
    radio.invalidate(); //could not be necessary
}

1
당신이 코드에 의해 색조를 변경하려는 경우 @emaillenin, 당신은 사용해야하는 control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);control은 색조를 변경하려는 제어하고 color당신은 예를 들어, 원하는 색상의 정수 값입니다R.color.red
호르헤 Arimany

1
@JorgeArimany RadioButton의 경우 getButtonDrawable 또는 getCompoundDrawables입니까? getCompoundDrawables는 목록을 반환
레닌 라즈 Rajasekaran에게

@emaillenin, 감사합니다. 귀하의 의견에 대한 답변은 버튼과 같은 다른 컨트롤에 대한 것이 었습니다. 원하는 코드를 추가하여 답변을 업그레이드했습니다. 도움이되기를 바랍니다.
Jorge Arimany

3
@JorgeArimany 나는 내가 <21을 위해 특별히 답을 찾고 있어요 .. 이미>를 위해 21 일 도착
레닌 라즈 Rajasekaran

확인 된 버튼의 색상을 변경하려면 상태를 추가하거나 바꾸고 android.R.attr.state_checked색상을 추가하십시오.
6rchid

159

업데이트 : 1. 대신 이것을 사용하십시오

   <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

2. 그런 다음이 줄을 부모 레이아웃이나 Alt + EnterAndroid Studio에 추가하여 자동 추가 xmlns:app="http://schemas.android.com/apk/res-auto"

최소 예는 다음과 같아야합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

</LinearLayout>

3. 프로그램에서 다음과 같이 호출해야합니다. AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

기본적으로 이러한 종류의 패턴은 AppCompatCheckBox, AppCompatButton 등과 같은 모든 AppCompact 유형에 적용 할 수 있습니다.

기존 답변 :

아래 안드로이드 API 21을 지원하기 위해 AppCompatRadioButton 을 사용할 수 있습니다 . 그런 다음 setSupportButtonTintList방법을 사용하여 색상을 변경하십시오. 이것은 라디오 버튼을 만드는 내 코드 스 니펫입니다.

    AppCompatRadioButton rb;
    rb = new AppCompatRadioButton(mContext);

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{
                    new int[]{-android.R.attr.state_checked},
                    new int[]{android.R.attr.state_checked}
            },
            new int[]{

                    Color.DKGRAY
                    , Color.rgb (242,81,112),
            }
    );
    rb.setSupportButtonTintList(colorStateList);

API 19에서 테스트 결과 :

이것은 API 19에서 테스트되었습니다.

자세한 내용은 안드로이드 참조 링크참조하십시오 .


10
이 답변은 받아 들여 져야합니다. xml을 통해이 지원 라디오 버튼을 추가하려면 다음을 사용하십시오.<android.support.v7.widget.AppCompatRadioButton ../>
Vinayak Garg

22
setSupportButtonTintList사용하지 않는 전용 방법입니다. 라디오 버튼은 특정 버전의 Android에서 이상하게 작동합니다. 대신을 사용하십시오 CompoundButtonCompat.setButtonTintList(rb, colorStateList).
wampastompa

2
@wampastompa가 맞습니다. API 22에서 결과는 외부 원만 보았으므로 확인했을 때 채워지지 않았습니다. @aknay; 답변을 업데이트하십시오
Nino van Hooff

1
API 16을 사용하고 있습니다. 위에 나열된 AppCompat 라디오 버튼을 추가했지만 여전히 올바르게 표시되지 않습니다.
tccpg288

1
코드가 필요하지 않습니다. IgorOliveira의 답변을 참조하십시오. 모든 버전에서 작동합니다.
Kirill Karmazin

77
<android.support.v7.widget.AppCompatRadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:buttonTint="@color/Color" />

11
이것은 사전, 현재 및 포스트 롤리팝 장치에 대한 답변입니다! 위대한
sdelvalle57

1
이것이 정답입니다. 짧고 완벽합니다. 참고 : app : buttonTint = "@ color / Color"를 사용하지만 andoid : buttonTint = "@ color / Color"는 사용하지 마십시오!
Kirill Karmazin

@KirillKarmazin는 <21 작동하는 수 있어야 가능
user924

56

API에서 작업 잘 포스트 (21) 등으로 21 미리 당신에 styles.xml넣어 :

<!-- custom style -->
<style name="radionbutton"
       parent="Base.Widget.AppCompat.CompoundButton.RadioButton">
    <item name="android:button">@drawable/radiobutton_drawable</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

귀하의 radio button에서의 XML은 다음과 같은 모양입니다 :

<RadioButton
    android:layout_width="wrap_content"
    style="@style/radionbutton"
    android:checked="false"
    android:layout_height="wrap_content"
    />

이제 당신이해야 할 일은에서를 만드는 radiobutton_drawable.xmldrawable folder입니다. 여기에 넣어야 할 것이 있습니다 :

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

당신의 radio_unchecked.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval">
  <stroke android:width="1dp" android:color="@color/colorAccent"/>
  <size android:width="30dp" android:height="30dp"/>
</shape>

당신의 radio_checked.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="oval">
      <stroke android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="30dp" android:height="30dp"/>
    </shape>
  </item>
  <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
    <shape android:shape="oval">
      <solid android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="10dp" android:height="10dp"/>
    </shape>
  </item>
</layer-list>

@color/colorAccent원하는 색상으로 바꾸 십시오.


프로그래밍 방식으로 어떻게해야합니까?
tccpg288

@ tccpg288이 XML을 사용하여 프로그래밍 방식으로 색상을 변경하려는 경우, 간단하게 (사실) radioButton.setChecked (거짓) 또는 radioButton.setChecked 사용하는 경우
하기 Vaibhav 샤르마

귀하의 질문을 이해하지 못합니다. 자세히 설명해 주시겠습니까?
Vaibhav Sharma

내 실수, 일반 RadioButton 또는 AppCompat RadioButton을 사용하면 문제가됩니까?
tccpg288

1
작동하지 않습니다. RadioButton을 초기화하면 어떻게됩니까? 내 코드는 다음과 같습니다. mPollAnswerArrayList.add ((indexCreated), new RadioButton ((getActivity (). getApplicationContext ()), null, R.style.radiobutton));
tccpg288

18

이 코드를 사용해야합니다 :

<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/black" />

사용 app:buttonTint대신 android:buttonTintandroid.support.v7.widget.AppCompatRadioButton대신 Radiobutton!


16
  1. styles.xml 파일에서 사용자 정의 스타일을 선언하십시오.

    <style name="MyRadioButton" parent="Theme.AppCompat.Light">  
      <item name="colorControlNormal">@color/indigo</item>
      <item name="colorControlActivated">@color/pink</item>
    </style>  
  2. android : theme 속성을 통해이 스타일을 RadioButton에 적용하십시오.

    <RadioButton  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Radio Button"
        android:theme="@style/MyRadioButton"/>

    활동이 연장되는 경우에만 AppCompatActivity


1
이것은 답변으로 받아 들여 져야합니다. 모든 버전에서 작동하며 가장 깨끗합니다
Antonis Radz

나는 <item name="android:colorControlActivated">@color/pink</item>그것이 나를 위해 일하기 위해 사용해야 했습니다. 왜 그런지 잘 모르겠습니다. 그렇지 않으면 좋은 대답입니다.
Taylor Venissat

16

API 21 미만

사용자 정의 스타일 RadioButton style.xml 만들기

 <style name="RadioButton" parent="Theme.AppCompat.Light">
     <item name="colorAccent">@color/green</item>
     <item name="android:textColorSecondary">@color/mediumGray</item>
     <item name="colorControlNormal">@color/red</item>
 </style>

레이아웃에서 테마 사용 :

<RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:theme="@style/RadioButton" />

API 21 이상

buttonTint를 사용하십시오.

 <RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:buttonTint="@color/green" />

명확히해야합니다 : buttonTint는 API에 관계없이 API 21 AppCompat / AndroidX를 사용하는 앱에서 작동합니다.
Chisko

12

질문은 오래되었지만 내 대답이 사람들을 도울 것이라고 생각합니다. xml의 ​​스타일을 사용하여 라디오 버튼의 선택되지 않은 상태와 확인 된 상태의 색상을 변경할 수 있습니다.

<RadioButton
    android:id="@+id/rb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/RadioButtonStyle" />

style.xml에서

<style name="RadioButtonStyle" parent="Theme.AppCompat.Light">
        <item name="colorAccent">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
</style>

이 스타일에서 원하는 색상을 설정할 수 있습니다.


RadioButton 내부의 테마가 작동하지 않습니다 (더 이상?). 여기에 있지만 onClick 메서드를 찾을 수 없기 때문에 버튼을 클릭하는 동안 충돌이 발생합니다.
Bevor

이 문제에는 다른 이유가 있습니다. 해당보기에서 onClick을 구현하기 전에 올바른보기의 ID를 가져 오십시오.
Jaura

9

buttonTint속성을 설정하십시오 . 예를 들면 다음과 같습니다 android:buttonTint="#99FF33".


9
이것은 API 21 이후
기적 doh

7

나는 이렇게 짧게 만들었습니다 (21 이전 API뿐만 아니라 21 이전 작업)

xml의 ​​라디오 버튼은 다음과 같아야합니다.

  <RadioButton android:id="@+id/radioid"                    
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"                 
                android:button="@drawable/radiodraw" />

radiodraw.xml에서

  <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">    
      <item android:state_checked="false" >
          <shape  android:shape="oval" >
              <stroke android:width="1dp" android:color="#000"/>
              <size android:width="30dp" android:height="30dp"/>
              <solid android:color="@android:color/transparent"/>
          </shape>
      </item>
      <item android:state_checked="true">
          <layer-list>
              <item>
                  <shape android:shape="oval">
                      <stroke android:width="1dp" android:color="#000"/>
                      <size android:width="30dp" android:height="30dp"/>
                      <solid android:color="@android:color/transparent"/>
                  </shape>
              </item>
              <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
                  <shape android:shape="oval">
                      <solid android:width="1dp" android:color="#000"/>
                      <size android:width="10dp" android:height="10dp"/>
                  </shape>
              </item>
          </layer-list>
      </item>
  </selector>

확인되지 않은 상태를 그리기 위해 투명한 색을 추가해야합니다. 그렇지 않으면 검은 색 타원형을 그립니다.


6

때로는 다음 과 같이 colorControlNormal 을 재정의해야합니다 .

    <style name="RadioButtonStyle" parent="AppTheme">
       <item name="colorControlNormal">@color/pink</item>
       <item name="colorAccent">@color/colorPrimary</item>
       <item name="android:textColorSecondary">@color/black</item>
    </style>

그리고 당신은 다음과 같은 버튼을 얻을 것입니다 :

여기에 이미지 설명을 입력하십시오

colorControlNormal 은 점검되지 않은 상태에 사용되고 colorAccent 는 점검 됨에 사용됩니다 .


5

xml 속성이 있습니다.

android:buttonTint="yourcolor"

최소 API가 21보다 높거나 작동하지 않는지 확인하십시오
Jcorretjer

app : buttonTint = "your_color"
Mridul Das

"Make sure your min API is higher then 21 or this won't work"그건 틀렸어 AndroidX를 사용하여 API 17을 타겟팅하고 있는데 이것이 나를 위해 일한 유일한 것입니다
Chisko

3

비활성화, 확인 및 활성화 상태를 변경하려는 경우 다음 단계를 수행하십시오.

<!-- Or androidX radio button or material design radio button -->
<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/radio_button_color" />

그런 다음 color res 폴더에 "radio_button_color.xml"이라는 파일을 만듭니다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/yellow900" android:state_selected="true" />
    <item android:color="@color/yellow800" android:state_checked="true" />
    <item android:color="@color/gray800" android:state_enabled="false" />
    <item android:color="@color/yellow800" android:state_enabled="true" />
</selector>

2
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:buttonTint="@color/my_color"/>

모든 버튼은 색상, 원형 상자 및 중앙 점검을 변경합니다.


1
하지만 파문이 아닙니다 ;-)
Waza_Be

1

기본적으로 RadioButton은 res / values ​​/ colors.xml 파일에서 colorAccent의 색상을 사용합니다. 해당 파일로 이동하여 값을 변경하십시오.

<color name="colorAccent">#3F51B5</color>

원하는 색상으로.


0

가장 쉬운 방법은 colourAccent색상 을 변경 하는 values->colours.xml
것이지만 텍스트 커서 색상 편집 등과 같은 다른 것들도 변경 될 것입니다.

< color name="colorAccent">#75aeff</color >


0

클릭 및 클릭되지 않은 라디오 버튼에 다른 색상을 설정하려면 다음을 사용하십시오.

   android:buttonTint="@drawable/radiobutton"  in xml of the radiobutton and your radiobutton.xml will be:  
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#1E88E5"/>
<item android:state_checked="true" android:color="#00e676"/>
<item android:color="#ffffff"/>


0

android:buttonTint="@color/colorPrimary"태그에 속성을 사용 하면 도움이되기를 바랍니다.


0

나는이 문제가 있었다. 앱에 검정색 배경이 있고 배경으로 인해 보이지 않는 많은 RadioButton이있는 경우 android를 편집하는 것이 복잡합니다. 각 앱의 buttonTint는 가장 좋은 방법은 styles.xml 파일에서 부모 테마를 변경하는 것입니다

나는 바꿨다

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

따라서 RadioButtons의 원은 밝은 회색 음영이되었으며 이제 검정색 배경에서도 볼 수 있습니다.

이것은 내 style.xml 파일입니다.

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>


-4

@ jh314이 맞습니다. AndroidManifest.xml에서

 <application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"></application>

style.xml에서

  <!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/red</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

항목 이름은 colorAccent 여야합니다. 응용 프로그램의 위젯 기본 색상을 결정합니다.

그러나 코드에서 색상을 변경하려면 @aknay의 대답이 맞을 수 있습니다.


이것은 질문에 대한 답변을 제공하지 않습니다. 평판 이 충분 하면 모든 게시물댓글 수 있습니다 . 대신 asker의 설명이 필요없는 답변을 제공하십시오 . - 리뷰에서
semirturgay

내 대답은 응용 프로그램의 기본 색상을 변경하는 것입니다. 물론 라디오 버튼의 색상을 흰색으로 변경할 수 있습니다.
Iturbo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.