# Radio button [Radio buttons](https://m3.material.io/components/radio-button/overview) let people select one option from a set of options. Settings menu with radio buttons **Note:** Images use various dynamic color schemes. ## Design & API documentation * [Material 3 (M3) spec](https://m3.material.io/components/radio-button/overview) * [API reference](https://developer.android.com/reference/com/google/android/material/radiobutton/package-summary) ## Anatomy ![Anatomy of radio button](assets/radiobutton/radiobutton-anatomy.png) 1. Icon (selected) 2. Adjacent label text 3. Icon (unselected) More details on anatomy items are available in the [component guidelines](https://m3.material.io/components/radio-button/guidelines#4c0190e7-49da-43bf-b08b-828f71300425). ## Key properties ### Radio button attributes Element | Attribute | Related method(s) | Default value -------------------------- | ------------------------------------------ | ---------------------------------------------------------- | ------------- **To use material colors** | `app:useMaterialThemeColors` | `setUseMaterialThemeColors`
`isUseMaterialThemeColors` | `true` (ignored if `app:buttonTint` is set) **Color** | `app:buttonTint` | `setButtonTintList`
`getButtonTintList` | `?attr/colorOnSurface` (see all [states](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/radiobutton/res/color/m3_radiobutton_button_tint.xml)) **Min size** | `android:minWidth`
`android:minHeight` | `(set/get)MinWidth`
`(set/get)MinHeight` | `?attr/minTouchTargetSize` The color of the radio button defaults to `?attr/colorOnSurface` (unchecked) and `?attr/colorPrimary` (checked) defined in your app theme. If you want to override this behavior, you could use a custom drawable that should not be tinted, set `app:useMaterialThemeColors` to `false`: ```xml ``` ### Text label attributes Element | Attribute | Related method(s) | Default value -------------- | ------------------------ | ---------------------------------- | ------------- **Text label** | `android:text` | `setText`
`getText` | `null` **Color** | `android:textColor` | `setTextColor`
`getTextColors` | inherits from `AppCompatRadioButton` **Typography** | `android:textAppearance` | `setTextAppearance` | `?attr/textAppearanceBodyMedium` ### Radio button states Radio buttons can be selected or unselected. Radio buttons have enabled, disabled, hover, focused, and pressed states. ![Radio button states in an array. Columns are enabled, disabled, hover, focused, pressed. Rows are selected or unselected](assets/radiobutton/radiobutton-states.png) ### Styles Element | Style | Theme attribute ----------------- | --------------------------------------------- | --------------- **Default style** | `Widget.Material3.CompoundButton.RadioButton` | `?attr/radioButtonStyle` For the full list, see [styles](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/radiobutton/res/values/styles.xml) and [attrs](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/radiobutton/res/values/attrs.xml). ## Code implementation Before you can use Material radio buttons, you need to add a dependency to the Material components for Android library. For more information, go to the [Getting started](https://github.com/material-components/material-components-android/tree/master/docs/getting-started.md) page. ### Adding radio button A radio button is a circle that is filled in with an inset when selected. Radio buttons allow the user to select one option from a set. Use radio buttons when the user needs to see all available options. If available options can be collapsed, consider using a dropdown menu because it uses less space. **Note:** `` is auto-inflated as `` via `MaterialComponentsViewInflater` when using a `Theme.Material3.*` theme.

Radio button example

The following example shows a radio button group with three radio buttons. Example radio button group with 3 radio buttons, the first one is selected In the layout: ```xml ``` In code: ```kt val checkedRadioButtonId = radioGroup.checkedRadioButtonId // Returns View.NO_ID if nothing is checked. radioGroup.setOnCheckedChangeListener { group, checkedId -> // Responds to child RadioButton checked/unchecked } // To check a radio button radioButton.isChecked = true // To listen for a radio button's checked/unchecked state changes radioButton.setOnCheckedChangeListener { buttonView, isChecked // Responds to radio button being checked/unchecked } ``` ### Making radio buttons accessible Radio buttons support content labeling for accessibility and are readable by most screen readers, such as Talkback. Text rendered in radio buttons is automatically provided to accessibility services. Additional content labels are usually unnecessary. ### Grouping radio buttons Changes in the states of one radio button can affect other buttons in the group. Specifically, selecting a `RadioButton` in a `RadioGroup` will deselect all other buttons in that group. See the [example section](#radio-button-group-example) for implementation details. ## Customizing radio buttons ### Theming radio buttons Radio buttons support the customization of color and typography. #### Radio button theming example API and source code: * `MaterialRadioButton` * [Class definition](https://developer.android.com/reference/com/google/android/material/radiobutton/MaterialRadioButton) * [Class source](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/radiobutton/MaterialRadioButton.java) * `RadioGroup` * [Class definition](https://developer.android.com/reference/android/widget/RadioGroup) The following example shows a radio button with Material theming. !["5 radio buttons with brown text; first selected with pink outline and fill, last disabled with light brown text and button"](assets/radiobutton/radiobutton-theming.png) ##### Implementing radio button theming Use theme attributes in `res/values/styles.xml` which applies to all radio buttons and affects other components: ```xml ``` Use default style theme attributes, styles and theme overlays which apply to all radio buttons but do not affect other components: ```xml ``` You can also change the radio button colors via the `?attr/buttonTint` attribute: ```xml ``` and in `color/button_tint.xml`: ```xml ``` You can use the styles in the layout, which affects only this radio button: ```xml ```