Skip to content

Segmented buttons ​

Segmented buttons help people select options, switch views, or sort elements.

Overview · Specs · Guidelines · Accessibility

Note

Segmented buttons are no longer recommended in the Material 3 expressive update. For those who have updated, use the connected button group instead, which has mostly the same functionality but with an updated visual design.

Diagram of segmented button indicating 3 parts of its anatomy.

  1. Container
  2. Icon (optional for unselected state) 
  3. Label text

Tokens and specs ​

Browse the component elements, attributes, tokens, and their values. Learn more about design tokens

Design tokens

Token table

Machine-readable relationship table

Segmented buttons tokens · 1 token set · 46 tokens · live token table · DSDB TOKEN_TABLE.67e2613d87ca6f98

  • Default context: Theme: Light · Platform: Android · Audience: 3P · Font: Static · Contrast: Default · iOS dark theme elevation: None · iOS weight setting: Default
  • Not configurable here (group default used): Motion scheme: Standard · Language height: Small
  • Other contexts: Theme: Dark · Contrast: Medium contrast, High contrast. "Other contexts" lists values that differ from the default when only that one context changes.
  • Reference chain: aliases from the token to its source value (token → alias → … → value). "—" means the token holds a literal value.

Segmented button - Outlined · md.comp.outlined-segmented-button · 46 tokens

This component is not recommended. Use connected button groups instead. For outlined segmented buttons.

GroupTokenTypeReference chainResolved valueOther contexts
Enabled › Containermd.comp.outlined-segmented-button.outline.colorColormd.sys.color.outline → md.ref.palette.neutral-variant50#79747EDark: #938F99 via md.ref.palette.neutral-variant60
Medium contrast: #49454F via md.ref.palette.neutral-variant30
High contrast: #322F37 via md.ref.palette.neutral-variant20
Enabled › Containermd.comp.outlined-segmented-button.outline.widthLength—1dp—
Enabled › Containermd.comp.outlined-segmented-button.container.heightLength—40dp—
Enabled › Containermd.comp.outlined-segmented-button.selected.container.colorColormd.sys.color.secondary-container → md.ref.palette.secondary90#E8DEF8Dark: #4A4458 via md.ref.palette.secondary30
Medium contrast: #625B71 via md.ref.palette.secondary40
High contrast: #4A4458 via md.ref.palette.secondary30
Enabled › Containermd.comp.outlined-segmented-button.shapeShapemd.sys.shape.corner.fullCircular (fully rounded)—
Enabled › Label textmd.comp.outlined-segmented-button.unselected.label-text.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Enabled › Label textmd.comp.outlined-segmented-button.selected.label-text.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Enabled › Label textmd.comp.outlined-segmented-button.label-text.fontFont namesmd.sys.typescale.label-large.font → md.ref.typeface.plainRoboto—
Enabled › Label textmd.comp.outlined-segmented-button.label-text.line-heightLine heightmd.sys.typescale.label-large.line-height20pt—
Enabled › Label textmd.comp.outlined-segmented-button.label-text.sizeFont sizemd.sys.typescale.label-large.size14pt—
Enabled › Label textmd.comp.outlined-segmented-button.label-text.trackingFont trackingmd.sys.typescale.label-large.tracking0.1pt—
Enabled › Label textmd.comp.outlined-segmented-button.label-text.weightFont weightmd.sys.typescale.label-large.weight → md.ref.typeface.weight-medium500—
Enabled › Label textmd.comp.outlined-segmented-button.label-text.typeTypographycomposite
font names: md.comp.outlined-segmented-button.label-text.font → md.sys.typescale.label-large.font → md.ref.typeface.plain
font weight: md.comp.outlined-segmented-button.label-text.weight → md.sys.typescale.label-large.weight → md.ref.typeface.weight-medium
font size: md.comp.outlined-segmented-button.label-text.size → md.sys.typescale.label-large.size
line height: md.comp.outlined-segmented-button.label-text.line-height → md.sys.typescale.label-large.line-height
font tracking: md.comp.outlined-segmented-button.label-text.tracking → md.sys.typescale.label-large.tracking
Roboto · weight 500 · size 14pt · line height 20pt · tracking 0.1pt—
Enabled › Iconmd.comp.outlined-segmented-button.unselected.with-icon.icon.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Enabled › Iconmd.comp.outlined-segmented-button.selected.with-icon.icon.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Enabled › Iconmd.comp.outlined-segmented-button.with-icon.icon.sizeLength—18dp—
Disabled › Containermd.comp.outlined-segmented-button.disabled.outline.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Disabled › Containermd.comp.outlined-segmented-button.disabled.outline.opacityOpacity—0.12—
Disabled › Label textmd.comp.outlined-segmented-button.disabled.label-text.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Disabled › Label textmd.comp.outlined-segmented-button.disabled.label-text.opacityOpacity—0.38—
Disabled › Iconmd.comp.outlined-segmented-button.disabled.icon.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Disabled › Iconmd.comp.outlined-segmented-button.disabled.icon.opacityOpacity—0.38—
Hovered › Label textmd.comp.outlined-segmented-button.unselected.hover.label-text.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Hovered › Label textmd.comp.outlined-segmented-button.selected.hover.label-text.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Hovered › State layermd.comp.outlined-segmented-button.unselected.hover.state-layer.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Hovered › State layermd.comp.outlined-segmented-button.selected.hover.state-layer.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Hovered › State layermd.comp.outlined-segmented-button.hover.state-layer.opacityOpacitymd.sys.state.hover.state-layer-opacity0.08—
Hovered › Iconmd.comp.outlined-segmented-button.unselected.hover.icon.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Hovered › Iconmd.comp.outlined-segmented-button.selected.hover.icon.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Focused › Label textmd.comp.outlined-segmented-button.unselected.focus.label-text.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Focused › Label textmd.comp.outlined-segmented-button.selected.focus.label-text.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Focused › State layermd.comp.outlined-segmented-button.unselected.focus.state-layer.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Focused › State layermd.comp.outlined-segmented-button.selected.focus.state-layer.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Focused › State layermd.comp.outlined-segmented-button.focus.state-layer.opacityOpacitymd.sys.state.focus.state-layer-opacity0.1—
Focused › Iconmd.comp.outlined-segmented-button.unselected.focus.icon.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Focused › Iconmd.comp.outlined-segmented-button.selected.focus.icon.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Focused › Focus indicatormd.comp.outlined-segmented-button.focus.indicator.colorColormd.sys.color.secondary → md.ref.palette.secondary40#625B71Dark: #CCC2DC via md.ref.palette.secondary80
Medium contrast: #4A4458 via md.ref.palette.secondary30
High contrast: #332D41 via md.ref.palette.secondary20
Focused › Focus indicatormd.comp.outlined-segmented-button.focus.indicator.thicknessLengthmd.sys.state.focus-indicator.thickness3dp—
Focused › Focus indicatormd.comp.outlined-segmented-button.focus.indicator.outline.offsetLengthmd.sys.state.focus-indicator.outer-offset2dp—
Pressed (ripple) › Label textmd.comp.outlined-segmented-button.unselected.pressed.label-text.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Pressed (ripple) › Label textmd.comp.outlined-segmented-button.selected.pressed.label-text.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Pressed (ripple) › State layermd.comp.outlined-segmented-button.unselected.pressed.state-layer.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Pressed (ripple) › State layermd.comp.outlined-segmented-button.selected.pressed.state-layer.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100
Pressed (ripple) › State layermd.comp.outlined-segmented-button.pressed.state-layer.opacityOpacitymd.sys.state.focus.state-layer-opacity0.1—
Pressed (ripple) › Iconmd.comp.outlined-segmented-button.unselected.pressed.icon.colorColormd.sys.color.on-surface → md.ref.palette.neutral10#1D1B20Dark: #E6E0E9 via md.ref.palette.neutral90
Medium contrast: #000000 via md.ref.palette.neutral0
High contrast: #000000 via md.ref.palette.neutral0
Pressed (ripple) › Iconmd.comp.outlined-segmented-button.selected.pressed.icon.colorColormd.sys.color.on-secondary-container → md.ref.palette.secondary30#4A4458Dark: #E8DEF8 via md.ref.palette.secondary90
Medium contrast: #FFFFFF via md.ref.palette.secondary100
High contrast: #FFFFFF via md.ref.palette.secondary100

Color ​

Color values are implemented through design tokens. For design, this means working with color values that correspond with tokens. For implementation, a color value will be a token that references a value. Learn more about design tokens

Diagram of segmented button indicating its color mappings

Segmented button color roles used for light and dark schemes:

  1. On surface
  2. Outline
  3. Secondary container
  4. On secondary container

States ​

States are visual representations used to communicate the status of a component or interactive element.  Learn more about interaction states

Unselected ​

Side by side view of segmented buttons with 5 unselected states.

Unselected button states:

  1. Enabled 
  2. Disabled 
  3. Hovered 
  4. Focused 
  5. Pressed

Selected ​

Side by side view of segmented buttons with 4 selected states.

Selected button states:

  1. Selected 
  2. Hovered on selected
  3. Focused on selected
  4. Pressed on selected

Measurements ​

Diagram indicating layout values, paddings, and target size for segmented buttons

  1. Padding and container size 
  2. Target size
AttributeValue
Container widthDynamic based on labels
Segment widthContainer width / total segments (Example: 1/3)
Height40dp
Outline width1dp
Label alignmentCenter
Left/right paddingMin 12dp
Padding between elements8dp
Target size48dp

Density ​

Density can be used in denser UIs where space is limited. Density is only applied to the height.

Side by side view of segmented buttons with 4 different density heights

Each step down in density removes 4dp from the height

Unofficial offline mirror. Content © Google, licensed under CC BY 4.0.