androidtogglebuttonbar

Android: How to get a radiogroup with togglebuttons?


I want a group of buttons where a user can choose one of them as option. It has to be a radiobuttongroup like behaviour, but I don't want the radio circle to be present. I just want the user to be able to toggle only one of the buttons.

I think I would need someting like a togglegroup.

Does something like this exist in Android?


Solution

  • I'd just re-use the RadioGroup like so: (please note the onClick attribute,i.e. a button click will trigger your Activity's onToggle(View) method.

    <RadioGroup android:id="@+id/toggleGroup"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:orientation="horizontal"
            >
    
        <ToggleButton android:id="@+id/btn_Letter"
                      android:layout_height="wrap_content"
                      android:layout_width="fill_parent"
                      android:layout_weight="1"
                      android:textSize="14sp"
                      android:textOn="Letter"
                      android:textOff="Letter"
                      android:onClick="onToggle"
                      android:checked="true"
                />
        <ToggleButton android:id="@+id/btn_A4"
                      android:layout_height="wrap_content"
                      android:layout_width="fill_parent"
                      android:layout_weight="1"
                      android:textSize="14sp"
                      android:textOn="A4"
                      android:textOff="A4"
                      android:onClick="onToggle"
                />
    </RadioGroup>
    

    In your Activity, or some place else, you can define a listener, e.g.

    static final RadioGroup.OnCheckedChangeListener ToggleListener = new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(final RadioGroup radioGroup, final int i) {
                for (int j = 0; j < radioGroup.getChildCount(); j++) {
                    final ToggleButton view = (ToggleButton) radioGroup.getChildAt(j);
                    view.setChecked(view.getId() == i);
                }
            }
        };
    

    and register it, for instance in onCreate():

    @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         this.setContentView(R.layout.scan_settings);
    
         ((RadioGroup) findViewById(R.id.toggleGroup)).setOnCheckedChangeListener(ToggleListener);    
     }
    

    finally in onToggle(View), you would do whatever needs to happen, specific to your app. and also call the RadioGroup's check method, with the toggled view's id. Like so:

    public void onToggle(View view) {
        ((RadioGroup)view.getParent()).check(view.getId());
        // app specific stuff ..
    }