# MaterialButtonToggleGroup

[View Source](https://github.com/material-components/material-components-android/blob/1.14.0/lib/java/com/google/android/material/button/MaterialButtonToggleGroup.java)

*** ** * ** ***


```
public class MaterialButtonToggleGroup extends MaterialButtonGroup
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) |||
| ↳ | [com.google.android.material.button.MaterialButtonGroup](https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup) ||
|   | ↳ | [com.google.android.material.button.MaterialButtonToggleGroup](https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup) |

*** ** * ** ***

A common container for a set of related, toggleable `https://developer.android.com/reference/com/google/android/material/button/MaterialButton`s. The `https://developer.android.com/reference/com/google/android/material/button/MaterialButton`s in this group will be shown on a single line.

This layout currently only supports child views of type `https://developer.android.com/reference/com/google/android/material/button/MaterialButton`. Buttons can be added to this view group via XML, as follows:

```
<com.google.android.material.button.MaterialButtonToggleGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toggle_button_group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <com.google.android.material.button.MaterialButton
        style="?attr/materialButtonOutlinedStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_label_private"/>
    <com.google.android.material.button.MaterialButton
        style="?attr/materialButtonOutlinedStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_label_team"/>
    <com.google.android.material.button.MaterialButton
        style="?attr/materialButtonOutlinedStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_label_everyone"/>
    <com.google.android.material.button.MaterialButton
        style="?attr/materialButtonOutlinedStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_label_custom"/>

</com.google.android.material.button.MaterialButtonToggleGroup>
```

Buttons can also be added to this view group programmatically via the addView methods.

Note: Styling must applied to each child button individually. It is recommended to use the `materialButtonOutlinedStyle` attribute for all child buttons. `
materialButtonOutlinedStyle` will most closely match the Material Design guidelines for this component, and supports the checked state for child buttons.

Any `https://developer.android.com/reference/com/google/android/material/button/MaterialButton`s added to this view group are automatically marked as `
checkable`, and by default multiple buttons within the same group can be checked. To enforce that only one button can be checked at a time, set the `app:singleSelection` attribute to `
true` on the MaterialButtonToggleGroup or call `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#setSingleSelection(boolean)`.

MaterialButtonToggleGroup is a LinearLayout. Using `
android:layout_width="MATCH_PARENT"` and removing `android:insetBottom``
android:insetTop` on the children is recommended if using `VERTICAL`.

In order to cohesively group multiple buttons together, MaterialButtonToggleGroup overrides the start and end margins of any children added to this layout such that child buttons are placed directly adjacent to one another.

MaterialButtonToggleGroup also overrides any `shapeAppearance`, `
shapeAppearanceOverlay`, or `cornerRadius` attribute set on MaterialButton children such that only the left-most corners of the first child and the right-most corners of the last child retain their shape appearance or corner size.

For more information, see the [component developer guidance](https://github.com/material-components/material-components-android/blob/master/docs/components/Button.md) and [design guidelines](https://material.io/components/buttons/overview).

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup.OnButtonCheckedListener` Interface definition for a callback to be invoked when a `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` is checked or unchecked in this group. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#MaterialButtonToggleGroup(Context)(Context context)` |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#MaterialButtonToggleGroup(Context,AttributeSet)(Context context, AttributeSet attrs)` |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#MaterialButtonToggleGroup(Context,AttributeSet,int)( Context context, AttributeSet attrs, int defStyleAttr )` |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#addOnButtonCheckedListener(com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener)( https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup.OnButtonCheckedListener listener )` Add a listener that will be invoked when the check state of a `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` in this group changes. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#addView(View,int,ViewGroup.LayoutParams)(View child, int index, LayoutParams params)` This override prohibits Views other than `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` to be added. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#check(int)(int id)` Sets the `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` whose id is passed in to the checked state. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#clearChecked()()` Clears the selections. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#clearOnButtonCheckedListeners()()` Remove all previously added `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup.OnButtonCheckedListener`s. |
| `int` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonId()()` When in `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#isSingleSelection()`, returns the identifier of the selected button in this group. |
| `https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/java/lang/Integer>` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonIds()()` Returns the identifiers of the selected `https://developer.android.com/reference/com/google/android/material/button/MaterialButton`s in this group. |
| `boolean` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#isSelectionRequired()()` Returns whether we prevent all child buttons from being deselected. |
| `boolean` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#isSingleSelection()()` Returns whether this group only allows a single button to be checked. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo)(AccessibilityNodeInfo info)` |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#removeOnButtonCheckedListener(com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener)( https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup.OnButtonCheckedListener listener )` Remove a listener that was previously added via `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#addOnButtonCheckedListener(com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener)`. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#setSelectionRequired(boolean)(boolean selectionRequired)` Sets whether we prevent all child buttons from being deselected. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#setSingleSelection(int)(int id)` Sets whether this group only allows a single button to be checked. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#setSingleSelection(boolean)(boolean singleSelection)` Sets whether this group only allows a single button to be checked. |
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#uncheck(int)(int id)` Sets the `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` whose id is passed in to the unchecked state. |

| ### Protected methods |
|---|---|
| `void` | `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#onFinishInflate()()` |

### Inherited Constants

From [com.google.android.material.button.MaterialButtonGroup](https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup) `static final https://developer.android.com/reference/java/lang/Object` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#OVERFLOW_BUTTON_TAG()` `static final int` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#OVERFLOW_MODE_MENU() = 1`

A value for `overflowMode`.
`static final int` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#OVERFLOW_MODE_NONE() = 0`

A value for `overflowMode`.
`static final int` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#OVERFLOW_MODE_WRAP() = 2`

A value for `overflowMode`.

### Inherited fields

From [com.google.android.material.button.MaterialButtonGroup](https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup) `int` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#overflowMode()` `int` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#spacing()`

### Inherited methods

From [com.google.android.material.button.MaterialButtonGroup](https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup) `boolean` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#checkLayoutParams(ViewGroup.LayoutParams)(LayoutParams p)` `void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#dispatchDraw(Canvas)(Canvas canvas)` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup.LayoutParams` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#generateDefaultLayoutParams()()` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup.LayoutParams` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#generateLayoutParams(AttributeSet)(AttributeSet attrs)` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup.LayoutParams` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#generateLayoutParams(ViewGroup.LayoutParams)(LayoutParams p)` `int` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#getChildDrawingOrder(int,int)(int childCount, int i)`

We keep track of which views are pressed and checked to draw them last.
`https://developer.android.com/reference/com/google/android/material/shape/ShapeAppearanceModel` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#getChildOriginalShapeAppearanceModel(int)(int index)`

Returns the original `https://developer.android.com/reference/com/google/android/material/shape/ShapeAppearanceModel` for the `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` child at the given index.
`https://developer.android.com/reference/com/google/android/material/shape/CornerSize` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#getInnerCornerSize()()`

Returns the inner corner size of the group.
`Drawable` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#getOverflowButtonIcon()()`

Returns the icon shown for the overflow button, if present.
`int` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#getOverflowMode()()`

Returns the overflow mode.
`https://developer.android.com/reference/com/google/android/material/shape/ShapeAppearanceModel` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#getShapeAppearance()()`

Returns the `https://developer.android.com/reference/com/google/android/material/shape/ShapeAppearanceModel` of the group.
`int` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#getSpacing()()`

Returns the spacing (in pixels) between each button in the group.
`void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#onLayout(boolean,int,int,int,int)(boolean changed, int l, int t, int r, int b)` `void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#onMeasure(int,int)(int widthMeasureSpec, int heightMeasureSpec)` `void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#onViewRemoved(View)(View child)` `void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#setEnabled(boolean)(boolean enabled)`

Enables this `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup` and all its `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` children
`void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#setInnerCornerSize(com.google.android.material.shape.CornerSize)(https://developer.android.com/reference/com/google/android/material/shape/CornerSize cornerSize)`

Sets the inner corner size of the group.
`void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#setOrientation(int)(int orientation)` `void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#setOverflowButtonIcon(Drawable)(Drawable icon)`

Sets the icon to show for the overflow button.
`void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#setOverflowButtonIconResource(int)(int iconResourceId)`

Sets the icon to show for the overflow button.
`void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#setOverflowMode(int)(int overflowMode)`

Sets the overflow mode.
`void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#setShapeAppearance(com.google.android.material.shape.ShapeAppearanceModel)(https://developer.android.com/reference/com/google/android/material/shape/ShapeAppearanceModel shapeAppearance)`

Sets the `https://developer.android.com/reference/com/google/android/material/shape/ShapeAppearanceModel` of the group.
`void` `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonGroup#setSpacing(int)(int spacing)`

Sets the spacing between each button in the group.

## Public constructors

### MaterialButtonToggleGroup

```
public MaterialButtonToggleGroup(Context context)
```

### MaterialButtonToggleGroup

```
public MaterialButtonToggleGroup(Context context, AttributeSet attrs)
```

### MaterialButtonToggleGroup

```
public MaterialButtonToggleGroup(
    Context context,
    AttributeSet attrs,
    int defStyleAttr
)
```

## Public methods

### addOnButtonCheckedListener

```
public void addOnButtonCheckedListener(
    MaterialButtonToggleGroup.OnButtonCheckedListener listener
)
```

Add a listener that will be invoked when the check state of a `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` in this group changes. See `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup.OnButtonCheckedListener`.

Components that add a listener should take care to remove it when finished via `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#removeOnButtonCheckedListener(com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup.OnButtonCheckedListener listener` | listener to add |

### addView

```
public void addView(View child, int index, LayoutParams params)
```

This override prohibits Views other than `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` to be added. It also makes updates to the add button shape and margins.

### check

```
public void check(int id)
```

Sets the `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` whose id is passed in to the checked state. If this MaterialButtonToggleGroup is in `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#isSingleSelection()`, then all other MaterialButtons in this group will be unchecked. Otherwise, other MaterialButtons will retain their checked state.

| Parameters |
|---|---|
| `int id` | View ID of `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` to set checked |

| See also |
|---|---|
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#uncheck(int)` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#clearChecked()` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonIds()` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonId()` |   |

### clearChecked

```
public void clearChecked()
```

Clears the selections. When the selections are cleared, no `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` in this group is checked and `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonIds()` returns an empty list.

| See also |
|---|---|
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#check(int)` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#uncheck(int)` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonIds()` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonId()` |   |

### clearOnButtonCheckedListeners

```
public void clearOnButtonCheckedListeners()
```

Remove all previously added `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup.OnButtonCheckedListener`s.

### getCheckedButtonId

```
public int getCheckedButtonId()
```

When in `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#isSingleSelection()`, returns the identifier of the selected button in this group. Upon empty selection, the returned value is NO_ID. If not in single selection mode, the return value is NO_ID.

ref R.styleable#MaterialButtonToggleGroup_checkedButton

| Returns |
|---|---|
| `int` | The unique id of the selected `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` in this group in `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#isSingleSelection()`. When not in `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#isSingleSelection()`, returns NO_ID. |

| See also |
|---|---|
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#check(int)` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#uncheck(int)` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#clearChecked()` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonIds()` |   |

### getCheckedButtonIds

```
public List<Integer> getCheckedButtonIds()
```

Returns the identifiers of the selected `https://developer.android.com/reference/com/google/android/material/button/MaterialButton`s in this group. Upon empty selection, the returned value is an empty list.

| Returns |
|---|---|
| `https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/java/lang/Integer>` | The unique IDs of the selected `https://developer.android.com/reference/com/google/android/material/button/MaterialButton`s in this group. When in `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#isSingleSelection()`, returns a list with a single ID. When no `https://developer.android.com/reference/com/google/android/material/button/MaterialButton`s are selected, returns an empty list. |

| See also |
|---|---|
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#check(int)` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#uncheck(int)` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#clearChecked()` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonId()` |   |

### isSelectionRequired

```
public boolean isSelectionRequired()
```

Returns whether we prevent all child buttons from being deselected.

ref R.styleable#MaterialButtonToggleGroup_selectionRequired

### isSingleSelection

```
public boolean isSingleSelection()
```

Returns whether this group only allows a single button to be checked.

ref R.styleable#MaterialButtonToggleGroup_singleSelection

| Returns |
|---|---|
| `boolean` | whether this group only allows a single button to be checked |

### onInitializeAccessibilityNodeInfo

```
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info)
```

### removeOnButtonCheckedListener

```
public void removeOnButtonCheckedListener(
    MaterialButtonToggleGroup.OnButtonCheckedListener listener
)
```

Remove a listener that was previously added via `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#addOnButtonCheckedListener(com.google.android.material.button.MaterialButtonToggleGroup.OnButtonCheckedListener)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup.OnButtonCheckedListener listener` | listener to remove |

### setSelectionRequired

```
public void setSelectionRequired(boolean selectionRequired)
```

Sets whether we prevent all child buttons from being deselected.

ref R.styleable#MaterialButtonToggleGroup_selectionRequired

### setSingleSelection

```
public void setSingleSelection(int id)
```

Sets whether this group only allows a single button to be checked.

Calling this method results in all the buttons in this group to become unchecked.

ref R.styleable#MaterialButtonToggleGroup_singleSelection

| Parameters |
|---|---|
| `int id` | boolean resource ID of whether this group only allows a single button to be checked |

### setSingleSelection

```
public void setSingleSelection(boolean singleSelection)
```

Sets whether this group only allows a single button to be checked.

Calling this method results in all the buttons in this group to become unchecked.

ref R.styleable#MaterialButtonToggleGroup_singleSelection

| Parameters |
|---|---|
| `boolean singleSelection` | whether this group only allows a single button to be checked |

### uncheck

```
public void uncheck(int id)
```

Sets the `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` whose id is passed in to the unchecked state.

| Parameters |
|---|---|
| `int id` | View ID of `https://developer.android.com/reference/com/google/android/material/button/MaterialButton` to set unchecked |

| See also |
|---|---|
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#check(int)` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#clearChecked()` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonIds()` |   |
| `https://developer.android.com/reference/com/google/android/material/button/MaterialButtonToggleGroup#getCheckedButtonId()` |   |

## Protected methods

### onFinishInflate

```
protected void onFinishInflate()
```