내 프로젝트 중 하나에서 RadioButton 원의 색상을 변경하고 싶습니다 . 설정 할 속성을 이해할 수 없습니다. 내가 가지고있는 배경색은 검은 색이므로 보이지 않습니다. 원의 색상을 흰색으로 설정하고 싶습니다.
내 프로젝트 중 하나에서 RadioButton 원의 색상을 변경하고 싶습니다 . 설정 할 속성을 이해할 수 없습니다. 내가 가지고있는 배경색은 검은 색이므로 보이지 않습니다. 원의 색상을 흰색으로 설정하고 싶습니다.
답변:
더 간단한 방법은 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
}
control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);
곳 control
은 색조를 변경하려는 제어하고 color
당신은 예를 들어, 원하는 색상의 정수 값입니다R.color.red
android.R.attr.state_checked
색상을 추가하십시오.
업데이트 : 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 + Enter
Android 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에서 테스트 결과 :
<android.support.v7.widget.AppCompatRadioButton ../>
setSupportButtonTintList
사용하지 않는 전용 방법입니다. 라디오 버튼은 특정 버전의 Android에서 이상하게 작동합니다. 대신을 사용하십시오 CompoundButtonCompat.setButtonTintList(rb, colorStateList)
.
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/Color" />
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.xml
것 drawable 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
원하는 색상으로 바꾸 십시오.
이 코드를 사용해야합니다 :
<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:buttonTint
도 android.support.v7.widget.AppCompatRadioButton
대신 Radiobutton
!
styles.xml 파일에서 사용자 정의 스타일을 선언하십시오.
<style name="MyRadioButton" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/indigo</item>
<item name="colorControlActivated">@color/pink</item>
</style>
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
<item name="android:colorControlActivated">@color/pink</item>
그것이 나를 위해 일하기 위해 사용해야 했습니다. 왜 그런지 잘 모르겠습니다. 그렇지 않으면 좋은 대답입니다.
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" />
질문은 오래되었지만 내 대답이 사람들을 도울 것이라고 생각합니다. 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>
이 스타일에서 원하는 색상을 설정할 수 있습니다.
나는 이렇게 짧게 만들었습니다 (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>
확인되지 않은 상태를 그리기 위해 투명한 색을 추가해야합니다. 그렇지 않으면 검은 색 타원형을 그립니다.
때로는 다음 과 같이 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 는 점검 됨에 사용됩니다 .
xml 속성이 있습니다.
android:buttonTint="yourcolor"
"Make sure your min API is higher then 21 or this won't work"
그건 틀렸어 AndroidX를 사용하여 API 17을 타겟팅하고 있는데 이것이 나를 위해 일한 유일한 것입니다
비활성화, 확인 및 활성화 상태를 변경하려는 경우 다음 단계를 수행하십시오.
<!-- 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>
클릭 및 클릭되지 않은 라디오 버튼에 다른 색상을 설정하려면 다음을 사용하십시오.
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"/>
나는이 문제가 있었다. 앱에 검정색 배경이 있고 배경으로 인해 보이지 않는 많은 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>
@ 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의 대답이 맞을 수 있습니다.