Ist es möglich, das Optionsfeldsymbol in einer Android-Optionsfeldgruppe zu ändern?

95

Ich möchte dem Benutzer meiner Android-Anwendung die Möglichkeit geben, einige Parameter festzulegen. Das Optionsfeld ist ideal für diese Situation. Ich mag es jedoch nicht, wenn die Optionsfelder gerendert werden.

Ist es möglich, das Optionsfeldsymbol zu ändern? Ist es beispielsweise möglich, ein benutzerdefiniertes Layout für jede Zeile zu erstellen und in diesem Layout auf mein eigenes Symbol zu verweisen und die Schriftart zu ändern?

Yamspog
quelle

Antworten:

167

Ja, es ist möglich, dass Sie Ihren eigenen Stil für Optionsfelder unter res / values ​​/ styles.xml definieren müssen:

<?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' sollte hier ein Stateful Drawable sein, 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>

Wenden Sie dann das benutzerdefinierte Thema entweder auf die gesamte App oder auf Aktivitäten Ihrer Wahl an.

Weitere Informationen zu Themen und Stilen finden Sie unter http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/ .

Konstantin Burov
quelle
13
Sie können die android: button-Eigenschaft auch einfach für das Optionsfeld selbst festlegen, anstatt einen separaten benutzerdefinierten Stil dafür zu definieren.
Yoni Samlan
7
Stimmt, aber das ist keine allzu gute Praxis, da Sie normalerweise mehr als nur ein Optionsfeld haben.
Konstantin Burov
@KonstantinBurov Was ist, wenn ich ein 9-Patch-Image verwende?
Hades
@KonstantinBurov Es sei denn, Sie fügen Buttons programmgesteuert hinzu. In diesem Fall ist es großartig :)
Cornholio
1
Für das Support-Design möchten Sie möglicherweise <style name = "CustomTheme" parent = "android: Theme"> <item name = "android: radioButtonStyle"> @ style / RadioButton </ item> <item name = "radioButtonStyle"> @ style verwenden / RadioButton </ item> </ style>
Dhruv Mevada
30

Sie können ein benutzerdefiniertes Bild wie eine normale Schaltfläche in den Radiobutton einfügen. Erstellen Sie dazu eine XML-Datei in einem zeichnbaren Ordner, z

<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> 

Hier können Sie 3 verschiedene Bilder für Radiobutton verwenden

und verwenden Sie diese Datei für RadioButton wie:

android:button="@drawable/aus"
android:layout_height="120dp"
android:layout_width="wrap_content" 
Chirag
quelle
13

Der einfachere Weg, nur das Optionsfeld zu ändern, besteht darin, den Wahlschalter für das Zeichen nach rechts einzustellen

<RadioButton
    ...
    android:button="@null"
    android:checked="false"
    android:drawableRight="@drawable/radio_button_selector" />

Und der Selektor ist:

<?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>

Das ist alles

topcbl
quelle
1
Beste Lösung, für meinen Fall habe ich auch 'drawableRight' in 'button' geändert und der Selektor-XML etwas Polsterung hinzugefügt
F-1
Dies ist die beste Lösung. Ich wurde auf diese Weise verwendet und es funktioniert gut. Aber nach der Migration zu andoidx android: button = "@ null" funktioniert nicht und wir sehen zwei Optionsfelder für jedes Element! .
Maniaq
1

ja .... `von Xml

android:button="@drawable/yourdrawable" 

und aus Java

myRadioButton.setButtonDrawable(resourceId or Drawable);

`

Shweta Jariya
quelle
0

Hier ist wahrscheinlich ein schneller Ansatz,

Geben Sie hier die Bildbeschreibung ein

Mit zwei oben gezeigten Symbolen haben Sie so RadioGroupetwas

Geben Sie hier die Bildbeschreibung ein

  • Ändern Sie die RadioGroupAusrichtung des Geräts in horizontal
  • RadioButtonGeben Sie für die jeweiligen Eigenschaften das Symbol für Button unter ein CompoundButton.
  • Polsterung und Größe anpassen,
  • und setzen Sie das Hintergrundattribut, wenn aktiviert.
kolunar
quelle
0

Falls Sie dies programmgesteuert tun möchten,

checkBoxOrRadioButton.setButtonDrawable(null);
checkBoxOrRadioButton.setBackgroundResource(R.drawable.resource_name);
Abhishek Kumar
quelle