J'ai un simple bouton radio Android ci-dessous
Le code pour cela est ::
activity_main.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<RadioGroup
Android:id="@+id/radioGroup1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true" >
<RadioButton
Android:id="@+id/radio0"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:checked="true"
Android:text="RadioButton1" />
<RadioButton
Android:id="@+id/radio1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="RadioButton2" />
<RadioButton
Android:id="@+id/radio2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="RadioButton3" />
</RadioGroup>
</RelativeLayout>
Merci !
Mais le nom du bouton est éclipsé par l'option de sélection, comment l'enlever?
Les modifications finales devraient au moins savoir quel bouton j'ai sélectionné parmi trois boutons radio ... est-il possible d'obtenir comme ci-dessous?
Ajoutez un arrière-plan pouvant faire référence à une image ou à un sélecteur (comme ci-dessous) et rendez le bouton transparent:
<RadioButton
Android:id="@+id/radio0"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/yourbuttonbackground"
Android:button="@Android:color/transparent"
Android:checked="true"
Android:text="RadioButton1" />
Si vous souhaitez que vos boutons radio aient une ressource différente une fois cochée, créez un sélecteur pouvant être dessiné en arrière-plan:
res/drawable/yourbuttonbackground.xml
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item
Android:drawable="@drawable/b"
Android:state_checked="true"
Android:state_pressed="true" />
<item
Android:drawable="@drawable/a"
Android:state_pressed="true" />
<item
Android:drawable="@drawable/a"
Android:state_checked="true" />
<item
Android:drawable="@drawable/b" />
</selector>
Dans le sélecteur ci-dessus, nous référons deux dessinables, a
et b
, voici comment nous les créons:
res/drawable/a.xml - État sélectionné
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" >
<corners
Android:radius="5dp" />
<solid
Android:color="#fff" />
<stroke
Android:width="2dp"
Android:color="#53aade" />
</shape>
res/drawable/b.xml - Etat normal
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" >
<corners
Android:radius="5dp" />
<solid
Android:color="#fff" />
<stroke
Android:width="2dp"
Android:color="#555555" />
</shape>
Plus de détails sur les objets ici: http://developer.Android.com/guide/topics/resources/drawable-resource.html
Utilisez le même format de fichier XML de la réponse d'Evan, mais un fichier pouvant être dessiné suffit pour le formatage.
<RadioButton
Android:id="@+id/radio0"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/custom_button_background"
Android:button="@Android:color/transparent"
Android:checked="true"
Android:text="RadioButton1" />
Et votre fichier séparable séparé:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:state_pressed="true" >
<shape Android:shape="rectangle" >
<corners Android:radius="3dip" />
<stroke Android:width="1dip" Android:color="#333333" />
<solid Android:color="#cccccc" />
</shape>
</item>
<item Android:state_checked="true">
<shape Android:shape="rectangle" >
<corners Android:radius="3dip" />
<stroke Android:width="1dip" Android:color="#333333" />
<solid Android:color="#cccccc" />
</shape>
</item>
<item>
<shape Android:shape="rectangle" >
<corners Android:radius="3dip" />
<stroke Android:width="1dip" Android:color="#cccccc" />
<solid Android:color="#ffffff" />
</shape>
</item>
</selector>
Vous devez renseigner l'attribut "Button" de la classe "CompoundButton" avec un chemin XML ( my_checkbox ) . Dans XML XML, vous devez avoir:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:state_checked="false" Android:drawable="@drawable/checkbox_not_checked" />
<item Android:state_checked="true" Android:drawable="@drawable/checkbox_checked" />
<item Android:drawable="@drawable/checkbox_not_checked" /> <!-- default -->
</selector>
N'oubliez pas de remplacer my_checkbox par votre nom de fichier de la case à cocher drawable, checkbox_not_checked par votre fichier PNG drawable qui est votre case à cocher lorsqu'elle n'est pas cochée et checkbox_checked avec votre image lorsqu'elle est cochée.
Pour la taille, mettez à jour directement les paramètres de mise en page.
J'ai mis à jour la réponse acceptée et supprimé des choses inutiles.
J'ai créé XML pour l'image suivante.
VotreXMLcode pour RadioButton
sera:
<RadioGroup
Android:id="@+id/daily_weekly_button_view"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginStart="8dp"
Android:layout_marginLeft="8dp"
Android:layout_marginTop="8dp"
Android:layout_marginEnd="8dp"
Android:layout_marginRight="8dp"
Android:gravity="center_horizontal"
Android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RadioButton
Android:id="@+id/radio0"
Android:layout_width="@dimen/_80sdp"
Android:gravity="center"
Android:layout_height="wrap_content"
Android:background="@drawable/radio_flat_selector"
Android:button="@Android:color/transparent"
Android:checked="true"
Android:paddingLeft="@dimen/_16sdp"
Android:paddingTop="@dimen/_3sdp"
Android:paddingRight="@dimen/_16sdp"
Android:paddingBottom="@dimen/_3sdp"
Android:text="Daily"
Android:textColor="@color/radio_flat_text_selector" />
<RadioButton
Android:id="@+id/radio1"
Android:gravity="center"
Android:layout_width="@dimen/_80sdp"
Android:layout_height="wrap_content"
Android:background="@drawable/radio_flat_selector"
Android:button="@Android:color/transparent"
Android:paddingLeft="@dimen/_16sdp"
Android:paddingTop="@dimen/_3sdp"
Android:paddingRight="@dimen/_16sdp"
Android:paddingBottom="@dimen/_3sdp"
Android:text="Weekly"
Android:textColor="@color/radio_flat_text_selector" />
</RadioGroup>
radio_flat_selector.xml
pour le sélecteur de fond:<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/radio_flat_selected" Android:state_checked="true" />
<item Android:drawable="@drawable/radio_flat_regular" />
</selector>
radio_flat_selected.xml
pour le bouton sélectionné:<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<corners
Android:radius="1dp"
/>
<solid Android:color="@color/colorAccent" />
<stroke
Android:width="1dp"
Android:color="@color/colorAccent" />
</shape>
radio_flat_regular.xml
pour sélecteur standard:<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<corners Android:radius="1dp" />
<solid Android:color="#fff" />
<stroke
Android:width="1dp"
Android:color="@color/colorAccent" />
</shape>
Tous les 3 codes de fichier ci-dessus seront dans le dossier drawable/
.
Désormais, nous avons également besoin de Text
Color Selector pour modifier la couleur du texte en conséquence.
radio_flat_text_selector.xml
pour le sélecteur de couleur de texte(Utilisez le dossier color/
pour ce fichier.)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="@color/colorAccent" Android:state_checked="false" />
<item Android:color="@color/colorWhite" Android:state_checked="true" />
</selector>
Remarque: j'ai examiné de nombreuses réponses pour ce type de solution, mais je n'ai pas trouvé la bonne solution, donc je le fais.
J'espère que cela vous sera utile.
Merci.
Afin de masquer le bouton radio par défaut, je suggérerais de supprimer le bouton au lieu de le rendre transparent car tous les commentaires visuels sont gérés par l'arrière-plan dessinable:
Android:button="@null"
Aussi, il serait préférable de utiliser des styles car il y a plusieurs boutons radio:
<RadioButton style="@style/RadioButtonStyle" ... />
<style name="RadioButtonStyle" parent="@Android:style/Widget.CompoundButton">
<item name="Android:background">@drawable/customButtonBackground</item>
<item name="Android:button">@null</item>
</style>
Vous aurez besoin du Seslyn customButtonBackground drawable too.
Le meilleur moyen d’ajouter un dessin personnalisable est:
<RadioButton
Android:id="@+id/radiocar"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:background="@Android:color/transparent"
Android:button="@drawable/yourbuttonbackground"
Android:checked="true"
Android:drawableRight="@mipmap/car"
Android:paddingLeft="5dp"
Android:paddingRight="5dp"
Android:text="yourtexthere"/>
L'incrustation d'ombres par dessin personnalisable est supprimé ici
Créez une nouvelle disposition dans un dossier pouvant être dessiné et nommez-la custom_radiobutton (vous pouvez également renommer)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:state_checked="false"
Android:drawable="@drawable/your_radio_off_image_name" />
<item Android:state_checked="true"
Android:drawable="@drawable/your_radio_on_image_name" />
</selector>
Utilisez ceci dans votre activité de mise en page
<RadioButton
Android:id="@+id/radiobutton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:button="@drawable/custom_radiobutton"/>
Définir Android:background
et Android:button
de RadioButton comme si la réponse acceptée ne fonctionnait pas pour moi. L'image pouvant être dessinée était affichée en tant qu'arrière-plan (le jour où Android:button
était défini sur transparent était associé au texte du bouton radio sous la forme
Android:background="@drawable/radiobuttonstyle"
Android:button="@Android:color/transparent"
alors donné radiobutton comme radiobuttonstyle.xml
<RadioButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:checked="true"
Android:text="Maintenance"
Android:id="@+id/radioButton1"
Android:button="@drawable/radiobuttonstyle"
/>
et radiobuttonstyle.xml est comme suit
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_checked="true" Android:drawable="@drawable/ic_radio_checked"></item>
<item Android:state_checked="false" Android:drawable="@drawable/ic_radio_unchecked"></item>
</selector>
et après ce radiobutton avec le style de bouton personnalisé travaillé.
Je me rends compte que c’est une réponse tardive, mais si vous parcourez developer.Android.com, il semble que le bouton Basculer serait idéal pour votre situation.
http://developer.Android.com/guide/topics/ui/controls/togglebutton.html
Et bien sûr, vous pouvez toujours utiliser les autres suggestions pour avoir un fond attrayant pour obtenir le look personnalisé que vous voulez.
<ToggleButton
Android:id="@+id/togglebutton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/custom_button_background"
Android:textOn="On"
Android:textOff="Off"
/>
À présent, si vous voulez utiliser votre édition finale et créer un effet de "halo" autour de vos boutons, vous pouvez utiliser un autre sélecteur personnalisé pour le faire.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true" > <!-- selected -->
<shape>
<solid
Android:color="@Android:color/white" />
<stroke
Android:width="3px"
Android:color="@Android:color/holo_blue_bright" />
<corners
Android:radius="5dp" />
</shape>
</item>
<item> <!-- default -->
<shape>
<solid
Android:color="@Android:color/white" />
<stroke
Android:width="1px"
Android:color="@Android:color/darker_gray" />
<corners
Android:radius="5dp" />
</shape>
</item>
</selector>