2015-09-12 9 views
7

私はアンドロイドで選択できるボタンのグループを作り、そのうちの1つだけをアクティブにしようとしています。私はラジオグループとラジオボタンの同じロジックで作業する必要があります。選択して個別にアクティブにできるボタングループを作成する最善の方法は何ですか?

私は多くの選択肢を試しましたが、私は最も効果的な方法を望んでいます。どうしたらいいですか?

+0

あなたは本当にボタンがタブ – Michael

+0

ように振る舞うしたいんいいえ、私はボタンが、私は、彼らがラジオボタンのように仕事をしなければならないことを説明している理由のトグルボタンのように動作したかったです。とにかく私はすでにそれを解決しました。 –

答えて

3

ラジオボタンをラジオグループ内で使用して、各ラジオボタンをボタンのように見せることができます。

xmlでは、各ラジオボタンセットandroid:button="@null"のため、ドットは表示されません。いくつかのパディングを追加して、見た目を変えることができます。

コードでは、CheckedChangeListenerをラジオグループに設定し、checkedIdを指定したcheckedView(RadioButton)への参照を探します。この例では、ビューの背景色を変更しましたが、別の背景も追加できます。 radioButtonがnullでない場合は、既に変更されていることを意味します。そのため、再度初期状態を設定します。

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 
    } 
}); 

これが役に立ちます。

+0

あなたの答えをありがとう!あなたの答えが私の評判のために有用であるとは思えません。できます!しかし、私は別の問題があります。ボタンが選択されたときに画像(.png)を入れたいと思います。どうすればいいの? –

+0

あなたは大歓迎です!私はコードを編集して、 "ボタン"が選択されたときにイメージが追加され、別のイメージが選択されたときにイメージが削除されるようになりました。 –

+0

@DennySchuldt:ドットを無効にするには 'android:button =" @ null "と言っていましたが、' android:button = "@ android:color/transparent" 'と表示されることもあります。好みはありますか? – GeertVc

5

デニーSchuldtが示唆したように、コードでこれを設定することができますが、「クリーン」な方法は、XML(例えば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> 

、ボタンの背景として設定:android:background="@drawable/radio"

8

1.activity_button_group.xml:あなたはこの簡単な方法を使用することができます

enter image description here

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

初期ボタンの状態を設定するのを忘れました – Michael

+0

私はこれを使用しました:btn [i] =(Button)findViewById(btn_id [i]); –

関連する問題