2015-09-12 10 views
7

Ich versuche, in Androiden eine Gruppe von Tasten zu tun, die ausgewählt werden können und nur eine von ihnen aktivieren. Ich muss mit der gleichen Logik einer Radiogruppe und Radiobuttons arbeiten.Was ist der beste Weg, um eine Schaltflächengruppe zu erstellen, die unabhängig ausgewählt und aktiviert werden kann?

Ich habe viele Alternativen versucht, aber ich möchte den effektivsten Weg. Wie kann ich es tun?

+0

tun Sie wirklich die Schaltfläche wie Tab verhalten soll – Michael

+0

Nein, ich die Taste verhält sich wie Umschaltflächen wollte, deshalb habe ich erklärt, dass sie wie Radiobuttons arbeiten . Jedenfalls habe ich es schon gelöst. –

Antwort

3

Sie können immer noch Radio Buttons innerhalb einer Radio Gruppe verwenden, und Attribute, um jeden Radio Button wie eine Schaltfläche aussehen zu lassen.

In Xml, für jedes Optionsfeld android:button="@null" gesetzt, so dass Punkte nicht sichtbar sind. Sie könnten etwas Polsterung hinzufügen, damit es anders aussieht.

Setzen Sie im Code einen CheckedChangeListener auf Ihre radioGroup und suchen Sie dann den Verweis auf checkedView (RadioButton) mit checkedId. In diesem Beispiel habe ich gerade die Hintergrundfarbe der Ansicht geändert, aber Sie könnten auch einen anderen Hintergrund hinzufügen. Wenn der radioButton nicht null ist, bedeutet dies, dass er bereits geändert wurde. Daher setze ich den ursprünglichen Status erneut.

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(RadioGroup group, int checkedId) { 
    if (radioButton != null) { 
     radioButton.setBackgroundColor(Color.TRANSPARENT); 
     radioButton.setButtonDrawable(0); // removes the image 
    } 
    radioButton = (RadioButton) group.findViewById(checkedId); 
    radioButton.setBackgroundColor(Color.YELLOW); 
    radioButton.setButtonDrawable(R.drawable.icon); //sets the image 
    } 
}); 

Hoffe, das hilft!

+0

Danke für Ihre Antwort! Ich kann deine Antwort nicht als nützlich bezeichnen, weil mein Ruf ist. Es klappt! Aber ich habe ein anderes Problem. Ich möchte ein Bild (.png) einfügen, wenn die Schaltfläche ausgewählt ist. Weißt du, wie kann ich es tun? –

+0

Gern geschehen! Ich habe den Code bearbeitet, so dass jetzt ein Bild hinzugefügt wird, wenn die "Schaltfläche" ausgewählt ist, und entfernt, wenn eine andere ausgewählt wird. –

+0

@DennySchuldt: Sie erwähnten 'android: button =" @ null "' um die Punkte zu löschen, aber manchmal sehen Sie auch 'android: button =" @ android: color/transparent "'. Gibt es eine Präferenz? – GeertVc

5

Während Sie dies im Code festgelegt als Denny Schuldt vorgeschlagen, eine "saubere" Art und Weise ist es in XML zu tun (zB drawable/radio.xml):

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/button_checked" android:state_checked="true" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 

Und legen Sie es als Schaltfläche Hintergrund: android:background="@drawable/radio"

8

enter image description here

können Sie diese einfache Art und Weise verwenden:

1.activity_button_group.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal"> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="A" 
    android:id="@+id/btn0" 
    android:layout_gravity="center_vertical" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="B" 
    android:id="@+id/btn1" 
    android:layout_gravity="center_vertical" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="C" 
    android:id="@+id/btn2" 
    android:layout_gravity="center_vertical" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="D" 
    android:id="@+id/btn3" 
    android:layout_gravity="center_vertical" /> 
</LinearLayout> 

2.ButtonGroupActivity.java

public class ButtonGroupActivity extends Activity implements View.OnClickListener{ 

    private Button[] btn = new Button[4]; 
    private Button btn_unfocus; 
    private int[] btn_id = {R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn3}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_button_group); 

     for(int i = 0; i < btn.length; i++){ 
      btn[i] = (Button) findViewById(btn_id[i]); 
      btn[i].setBackgroundColor(Color.rgb(207, 207, 207)); 
      btn[i].setOnClickListener(this); 
     } 

     btn_unfocus = btn[0]; 
    } 

    @Override 
    public void onClick(View v) { 
     //setForcus(btn_unfocus, (Button) findViewById(v.getId())); 
     //Or use switch 
     switch (v.getId()){ 
      case R.id.btn0 : 
       setFocus(btn_unfocus, btn[0]); 
       break; 

      case R.id.btn1 : 
       setFocus(btn_unfocus, btn[1]); 
       break; 

      case R.id.btn2 : 
       setFocus(btn_unfocus, btn[2]); 
       break; 

      case R.id.btn3 : 
       setFocus(btn_unfocus, btn[3]); 
       break; 
     } 
    } 

    private void setFocus(Button btn_unfocus, Button btn_focus){ 
     btn_unfocus.setTextColor(Color.rgb(49, 50, 51)); 
     btn_unfocus.setBackgroundColor(Color.rgb(207, 207, 207)); 
     btn_focus.setTextColor(Color.rgb(255, 255, 255)); 
     btn_focus.setBackgroundColor(Color.rgb(3, 106, 150)); 
     this.btn_unfocus = btn_focus; 
    } 
} 
+0

Sie vergessen, initialen Knopfzustand zu setzen – Michael

+0

Ich benutzte das: btn [i] = (Button) findViewById (btn_id [i]); –