Wie verwende ich das Anwenden eines benutzerdefinierten Zeichens auf RadioButton?

75

Es sieht so aus, als könnten wir in einem RadioButton Folgendes verwenden:

android:button="@drawable/myCustomStateBackground"

Dieses Drawable nimmt jedoch nur die Stelle ein, an der das Radio Drawable normalerweise eingesetzt werden würde. Idealerweise möchte ich, dass mein gesamter Schaltflächenhintergrund zustandsbehaftet ist. Wenn also gedrückt wird, soll der gesamte Knopf so aussehen, als ob er im gedrückten Zustand stecken bleibt. Um das zu tun, hatte ich gehofft, ich könnte so etwas tun:

android:button="null"
android:background="@drawable/myCustomStateBackground"

Aber dann weiß der Hintergrund, der gezeichnet werden kann, nichts über den Push-Status, wie es das Button-Attribut tut. Gibt es einen Weg, um das zu umgehen?

user291701
quelle
Anstatt den Hintergrund zu ändern, suchen Sie wahrscheinlich nach dem android:buttonAttribut.
MH.

Antworten:

107

Geben Sie Ihrem Radiobutton einen benutzerdefinierten Stil:

<style name="MyRadioButtonStyle" parent="@android:style/Widget.CompoundButton.RadioButton">
    <item name="android:button">@drawable/custom_btn_radio</item>
</style>

custom_btn_radio.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:state_window_focused="false"
          android:drawable="@drawable/btn_radio_on" />
    <item android:state_checked="false" android:state_window_focused="false"
          android:drawable="@drawable/btn_radio_off" />

    <item android:state_checked="true" android:state_pressed="true"
          android:drawable="@drawable/btn_radio_on_pressed" />
    <item android:state_checked="false" android:state_pressed="true"
          android:drawable="@drawable/btn_radio_off_pressed" />

    <item android:state_checked="true" android:state_focused="true"
          android:drawable="@drawable/btn_radio_on_selected" />
    <item android:state_checked="false" android:state_focused="true"
          android:drawable="@drawable/btn_radio_off_selected" />

    <item android:state_checked="false" android:drawable="@drawable/btn_radio_off" />
    <item android:state_checked="true" android:drawable="@drawable/btn_radio_on" />
</selector>

Ersetzen Sie die Zeichen durch Ihre eigenen.

Benito Bertoli
quelle
5
Tut mir leid - dies ändert nur die Zeichenfläche "Schaltfläche" - Ich möchte die Zeichenfläche "Hintergrund" ändern - aber ihr Status verhält sich auch wie das Attribut "Schaltfläche" - sieht es nicht so aus, als ob RadioButton dies unterstützt?
user291701
1
Wenn Sie dieses Zeichenelement verwenden, sobald mein Optionsfeld aktiviert ist, wird es nie
deaktiviert
@ umerk44 So funktioniert ein RadioButton, wenn er nicht Teil einer Gruppe ist. Wenn Sie möchten, dass es nicht auswählbar ist, können Sie eine CheckBox verwenden.
Ivan Wooll
36

Sie sollten android:button="@null"anstelle von einstellen "null".

Du warst so nah dran!

Tore Rudberg
quelle
35

vollständige Lösung hier:

<RadioGroup
    android:id="@+id/radioGroup1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RadioButton
        android:id="@+id/radio0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@drawable/oragne_toggle_btn"
        android:checked="true"
        android:text="RadioButton" />

    <RadioButton
        android:id="@+id/radio1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@drawable/oragne_toggle_btn"
        android:layout_marginTop="20dp"
        android:text="RadioButton" />

    <RadioButton
        android:id="@+id/radio2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@drawable/oragne_toggle_btn"
        android:layout_marginTop="20dp"
        android:text="RadioButton" />
</RadioGroup>

Selektor XML

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/orange_btn_selected" android:state_checked="true"/>
<item android:drawable="@drawable/orange_btn_unselected"    android:state_checked="false"/>

 </selector>
Ali Imran
quelle
2
oder Sie könnten verwendenandroid:button="@drawable/oragne_toggle_btn"
Pepela
1
Verwenden Sie nicht das Hintergrundattribut use> android: button = "@ drawable / oragne_toggle_btn"
Biswatma
Was ist mit Textfarbe?
Pratik Butani
8

Wenn Sie das einzige Symbol des Optionsfelds ändern möchten, können Sie es nur android:button="@drawable/ic_launcher"zu Ihrem Optionsfeld hinzufügen. Um die Empfindlichkeit beim Klicken zu erhöhen, müssen Sie den Selektor verwenden

 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/image_what_you_want_on_select_state" android:state_checked="true"/>
<item android:drawable="@drawable/image_what_you_want_on_un_select_state"    android:state_checked="false"/>


 </selector>

und auf Ihr Radio einstellen android:background="@drawable/name_of_selector"

John Smith
quelle
Wenn ich android: button = "@ null" verwende android: background = "@ drawable / myCustomStateBackground" für ein Optionsfeld, das sich im Menü der Navigationsleiste befindet. Es funktioniert nicht richtig. Manchmal sind Hintergrundbilder sichtbar, manchmal nicht. Bitte helfen Sie diesbezüglich.
Whisky
0

Fügen Sie programmgesteuert das Hintergrundbild hinzu

minSdkVersion 16

RadioGroup rg = new RadioGroup(this);
RadioButton radioButton = new RadioButton(this);
radioButton.setBackground(R.drawable.account_background);
rg.addView(radioButton);
Gayathri
quelle