Quero mudar a cor do círculo do RadioButton em um dos meus projetos , não consegui entender qual propriedade definir. A cor de fundo que estou usando é preta, então fica invisível. Quero definir a cor do círculo para branco.
Quero mudar a cor do círculo do RadioButton em um dos meus projetos , não consegui entender qual propriedade definir. A cor de fundo que estou usando é preta, então fica invisível. Quero definir a cor do círculo para branco.
Respostas:
Mais simples, basta definir o botão Cor da tinta: (só funciona no nível 21 da API ou acima)
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radio"
android:checked="true"
android:buttonTint="@color/your_color"/>
em seus values / colors.xml, coloque sua cor nesse caso avermelhada:
<color name="your_color">#e75748</color>
Resultado:
Se você quiser fazer isso por código (também api 21 e acima):
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);
, onde control
é o controle que você deseja alterar a tonalidade e color
é um valor inteiro da cor que você quer, por exemploR.color.red
android.R.attr.state_checked
e adicionar a cor.
Atualização: 1. use este aqui
<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. Em seguida, adicione esta linha no layout pai ou Alt + Enter
no Android Studio para adicionar automaticamente
xmlns:app="http://schemas.android.com/apk/res-auto"
O Exemplo Mínimo deve ficar assim:
<?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. No seu programa, você deve chamar assim.
AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);
Basicamente, esse tipo de padrão pode ser aplicado a todos os tipos de AppCompact, como AppCompatCheckBox, AppCompatButton e assim por diante.
Resposta antiga:
Para oferecer suporte abaixo da API do Android 21, você pode usar AppCompatRadioButton. Em seguida, use o setSupportButtonTintList
método para alterar a cor. Este é o meu trecho de código para criar um botão de opção.
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);
Resultado testado na API 19:
Veja o link de referência do Android para mais detalhes.
<android.support.v7.widget.AppCompatRadioButton ../>
setSupportButtonTintList
é um método privado que você não pretende usar. Os botões de opção se comportam de maneira estranha em determinadas versões do Android. Em vez disso, use CompoundButtonCompat.setButtonTintList(rb, colorStateList)
.
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/Color" />
Trabalhando na API pré-21 e pós-21.
Em seu artigo 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>
Seu radio button
em xml deve se parecer com:
<RadioButton
android:layout_width="wrap_content"
style="@style/radionbutton"
android:checked="false"
android:layout_height="wrap_content"
/>
Agora tudo que você precisa fazer é fazer um radiobutton_drawable.xml
na sua drawable folder
. Aqui está o que você precisa colocar nele:
<?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>
O seu 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>
O seu 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>
Apenas substitua @color/colorAccent
pela cor de sua escolha.
Você precisa usar este código:
<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" />
Usando em app:buttonTint
vez de android:buttonTint
e também em android.support.v7.widget.AppCompatRadioButton
vez de Radiobutton
!
Declare o estilo customizado em seu arquivo styles.xml.
<style name="MyRadioButton" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/indigo</item>
<item name="colorControlActivated">@color/pink</item>
</style>
Aplique esse estilo ao seu RadioButton via atributo android: theme.
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Radio Button"
android:theme="@style/MyRadioButton"/>
somente se sua atividade se estender AppCompatActivity
<item name="android:colorControlActivated">@color/pink</item>
para que funcionasse para mim. Ainda não sei por que. Caso contrário, esta é uma boa resposta.
Para sob API 21
Crie um estilo personalizado 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>
No layout, use o tema:
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/RadioButton" />
Para API 21 e mais
Basta usar buttonTint
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/green" />
A pergunta é antiga, mas acho que minha resposta ajudará as pessoas. Você pode alterar a cor do estado desmarcado e marcado do botão de opção usando o estilo em xml.
<RadioButton
android:id="@+id/rb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/RadioButtonStyle" />
Em 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>
Você pode definir as cores desejadas neste estilo.
Defina a buttonTint
propriedade Por exemplo android:buttonTint="#99FF33"
,.
Eu fiz isso da maneira mais curta assim (trabalhando na API pré-21 e pós-21)
Seu botão de opção em xml deve ficar assim
<RadioButton android:id="@+id/radioid"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:button="@drawable/radiodraw" />
em 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>
precisa adicionar cores transparentes para desenhar o status desmarcado; caso contrário, ele desenha um oval preto sólido.
Às vezes, você só precisa substituir o colorControlNormal assim:
<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>
E você receberá um botão como este:
colorControlNormal usado para o estado não verificado e colorAccent para marcado.
Existe um atributo xml para ele:
android:buttonTint="yourcolor"
"Make sure your min API is higher then 21 or this won't work"
isso é falso. Eu sou alvo API 17 com AndroidX e esta é a única coisa que funcionou para mim
Para aqueles que desejam alterar os estados de desativado, marcado e ativado, você executa as seguintes etapas:
<!-- 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" />
em seguida, na pasta res de cores, crie um arquivo chamado "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>
RadioButton, por padrão, assume a cor do colorAccent no arquivo res / values / colors.xml. Então vá para esse arquivo e altere o valor de
<color name="colorAccent">#3F51B5</color>
para a cor que você deseja.
A maneira mais fácil é mudar a colourAccent
cor, values->colours.xml
mas esteja ciente de que isso também mudará outras coisas, como editar a cor do cursor do texto etc.
< color name="colorAccent">#75aeff</color >
Se você deseja definir cores diferentes para o botão de opção clicado e não clicado, use:
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"/>
basta usar o android:buttonTint="@color/colorPrimary"
atributo na tag, espero que ajude
Eu tive esse problema. Se o seu aplicativo tiver um plano de fundo preto e você tiver muitos botões de opção invisíveis devido ao plano de fundo, é complicado editar o android: buttonTint de cada um, a melhor solução é alterar o tema principal em seu arquivo styles.xml
eu mudei
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
para
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
Assim, os círculos dos RadioButtons se tornaram um tom mais claro de cinza e agora são visíveis mesmo com um fundo preto.
Este é o meu arquivo 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 está correto. No AndroidManifest.xml,
<application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme"></application>
Em 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>
o nome do item deve ser colorAccent, decide a cor padrão dos widgets do aplicativo.
Mas se você quiser alterar a cor no código, talvez a resposta de @ aknay esteja correta.