Skip to content

Switch ​

Switches toggle the selection of an item on or off. Switches are the best way to let users adjust settings.

Overview · Specs · Guidelines · Accessibility

3 elements of a switch.

  1. Track 
  2. Handle (formerly "thumb")
  3. Icon

Tokens & specs ​

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

Design tokens

Token table

Machine-readable relationship table

Switch tokens · 1 token set · 78 tokens · live token table · DSDB TOKEN_TABLE.33b1b2925d9ff561

  • Default context: Theme: Light · Platform: Android · Audience: 3P · Contrast: Default · iOS dark theme elevation: None · iOS weight setting: Default
  • Not configurable here (group default used): Motion scheme: Standard · Font: Static · 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.

Switch · md.comp.switch · 78 tokens

For switches.

GroupTokenTypeReference chainResolved valueOther contexts
Enabled › Iconmd.comp.switch.selected.icon.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Enabled › Iconmd.comp.switch.selected.icon.sizeLength—16dp—
Enabled › Iconmd.comp.switch.unselected.icon.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Enabled › Iconmd.comp.switch.unselected.icon.sizeLength—16dp—
Enabled › Trackmd.comp.switch.track.heightLength—32dp—
Enabled › Trackmd.comp.switch.track.widthLength—52dp—
Enabled › Trackmd.comp.switch.unselected.track.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 › Trackmd.comp.switch.track.outline.widthLength—2dp—
Enabled › Trackmd.comp.switch.track.shapeShapemd.sys.shape.corner.fullCircular (fully rounded)—
Enabled › Trackmd.comp.switch.selected.track.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Enabled › Trackmd.comp.switch.unselected.track.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Enabled › Handlemd.comp.switch.unselected.handle.heightLength—16dp—
Enabled › Handlemd.comp.switch.with-icon.handle.heightLength—24dp—
Enabled › Handlemd.comp.switch.selected.handle.heightLength—24dp—
Enabled › Handlemd.comp.switch.pressed.handle.heightLength—28dp—
Enabled › Handlemd.comp.switch.unselected.handle.widthLength—16dp—
Enabled › Handlemd.comp.switch.with-icon.handle.widthLength—24dp—
Enabled › Handlemd.comp.switch.selected.handle.widthLength—24dp—
Enabled › Handlemd.comp.switch.pressed.handle.widthLength—28dp—
Enabled › Handlemd.comp.switch.handle.shapeShapemd.sys.shape.corner.fullCircular (fully rounded)—
Enabled › Handlemd.comp.switch.selected.handle.colorColormd.sys.color.on-primary → md.ref.palette.primary100#FFFFFFDark: #381E72 via md.ref.palette.primary20
Enabled › Handlemd.comp.switch.unselected.handle.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 › Handlemd.comp.switch.handle.shadow-color (deprecated)Colormd.sys.color.shadow → md.ref.palette.neutral0#000000—
Enabled › Handlemd.comp.switch.handle.elevation (deprecated)Elevationmd.sys.elevation.level11dp—
Enabled › Handlemd.comp.switch.handle.height (deprecated)Length—20dp—
Enabled › Handlemd.comp.switch.handle.width (deprecated)Length—20dp—
Enabled › State layermd.comp.switch.state-layer.sizeLength—40dp—
Enabled › State layermd.comp.switch.state-layer.shapeShapemd.sys.shape.corner.fullCircular (fully rounded)—
Disabled › Iconmd.comp.switch.disabled.selected.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.switch.disabled.selected.icon.opacityOpacity—0.38—
Disabled › Iconmd.comp.switch.disabled.unselected.icon.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Disabled › Iconmd.comp.switch.disabled.unselected.icon.opacityOpacity—0.38—
Disabled › Trackmd.comp.switch.disabled.track.opacityOpacity—0.12—
Disabled › Trackmd.comp.switch.disabled.selected.track.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 › Trackmd.comp.switch.disabled.unselected.track.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Disabled › Trackmd.comp.switch.disabled.unselected.track.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 › Handlemd.comp.switch.disabled.unselected.handle.opacityOpacity—0.38—
Disabled › Handlemd.comp.switch.disabled.selected.handle.opacityOpacity—1—
Disabled › Handlemd.comp.switch.disabled.selected.handle.colorColormd.sys.color.surface → md.ref.palette.neutral98#FEF7FFDark: #141218 via md.ref.palette.neutral6
Disabled › Handlemd.comp.switch.disabled.unselected.handle.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 › Handlemd.comp.switch.disabled.handle.opacity (deprecated)Opacity—0.38—
Disabled › Handlemd.comp.switch.disabled.handle.elevation (deprecated)Elevationmd.sys.elevation.level00dp—
Hovered › Iconmd.comp.switch.selected.hover.icon.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Hovered › Iconmd.comp.switch.unselected.hover.icon.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Hovered › Trackmd.comp.switch.selected.hover.track.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Hovered › Trackmd.comp.switch.selected.hover.state-layer.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Hovered › Trackmd.comp.switch.selected.hover.state-layer.opacityOpacitymd.sys.state.hover.state-layer-opacity0.08—
Hovered › Trackmd.comp.switch.unselected.hover.track.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Hovered › Trackmd.comp.switch.unselected.hover.track.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
Hovered › Trackmd.comp.switch.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 › Trackmd.comp.switch.unselected.hover.state-layer.opacityOpacitymd.sys.state.hover.state-layer-opacity0.08—
Hovered › Handlemd.comp.switch.selected.hover.handle.colorColormd.sys.color.primary-container → md.ref.palette.primary90#EADDFFDark: #4F378B via md.ref.palette.primary30
Medium contrast: #6750A4 via md.ref.palette.primary40
High contrast: #4F378B via md.ref.palette.primary30
Hovered › Handlemd.comp.switch.unselected.hover.handle.colorColormd.sys.color.on-surface-variant → md.ref.palette.neutral-variant30#49454FDark: #CAC4D0 via md.ref.palette.neutral-variant80
Medium contrast: #322F37 via md.ref.palette.neutral-variant20
High contrast: #000000 via md.ref.palette.neutral-variant0
Focused › Iconmd.comp.switch.selected.focus.icon.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Focused › Iconmd.comp.switch.unselected.focus.icon.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Focused › Trackmd.comp.switch.selected.focus.track.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Focused › Trackmd.comp.switch.selected.focus.state-layer.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Focused › Trackmd.comp.switch.selected.focus.state-layer.opacityOpacitymd.sys.state.focus.state-layer-opacity0.1—
Focused › Trackmd.comp.switch.unselected.focus.track.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Focused › Trackmd.comp.switch.unselected.focus.track.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
Focused › Trackmd.comp.switch.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 › Trackmd.comp.switch.unselected.focus.state-layer.opacityOpacitymd.sys.state.focus.state-layer-opacity0.1—
Focused › Handlemd.comp.switch.selected.focus.handle.colorColormd.sys.color.primary-container → md.ref.palette.primary90#EADDFFDark: #4F378B via md.ref.palette.primary30
Medium contrast: #6750A4 via md.ref.palette.primary40
High contrast: #4F378B via md.ref.palette.primary30
Focused › Handlemd.comp.switch.unselected.focus.handle.colorColormd.sys.color.on-surface-variant → md.ref.palette.neutral-variant30#49454FDark: #CAC4D0 via md.ref.palette.neutral-variant80
Medium contrast: #322F37 via md.ref.palette.neutral-variant20
High contrast: #000000 via md.ref.palette.neutral-variant0
Focused › Focus indicatormd.comp.switch.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.switch.focus.indicator.thicknessLengthmd.sys.state.focus-indicator.thickness3dp—
Focused › Focus indicatormd.comp.switch.focus.indicator.offsetLengthmd.sys.state.focus-indicator.outer-offset2dp—
Pressed (ripple) › Iconmd.comp.switch.selected.pressed.icon.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Pressed (ripple) › Iconmd.comp.switch.unselected.pressed.icon.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Pressed (ripple) › Trackmd.comp.switch.selected.pressed.track.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Pressed (ripple) › Trackmd.comp.switch.selected.pressed.state-layer.colorColormd.sys.color.primary → md.ref.palette.primary40#6750A4Dark: #D0BCFF via md.ref.palette.primary80
Medium contrast: #4F378B via md.ref.palette.primary30
High contrast: #381E72 via md.ref.palette.primary20
Pressed (ripple) › Trackmd.comp.switch.selected.pressed.state-layer.opacityOpacitymd.sys.state.pressed.state-layer-opacity0.1—
Pressed (ripple) › Trackmd.comp.switch.unselected.pressed.track.colorColormd.sys.color.surface-container-highest → md.ref.palette.neutral90#E6E0E9Dark: #36343B via md.ref.palette.neutral22
Pressed (ripple) › Trackmd.comp.switch.unselected.pressed.track.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
Pressed (ripple) › Trackmd.comp.switch.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) › Trackmd.comp.switch.unselected.pressed.state-layer.opacityOpacitymd.sys.state.pressed.state-layer-opacity0.1—
Pressed (ripple) › Handlemd.comp.switch.selected.pressed.handle.colorColormd.sys.color.primary-container → md.ref.palette.primary90#EADDFFDark: #4F378B via md.ref.palette.primary30
Medium contrast: #6750A4 via md.ref.palette.primary40
High contrast: #4F378B via md.ref.palette.primary30
Pressed (ripple) › Handlemd.comp.switch.unselected.pressed.handle.colorColormd.sys.color.on-surface-variant → md.ref.palette.neutral-variant30#49454FDark: #CAC4D0 via md.ref.palette.neutral-variant80
Medium contrast: #322F37 via md.ref.palette.neutral-variant20
High contrast: #000000 via md.ref.palette.neutral-variant0

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

6 color roles of a switch in light and dark themes.

Switch color roles used for light and dark themes:

  1. Surface container highest
  2. Outline
  3. Outline
  4. Primary
  5. On primary
  6. On primary container

Adjacent text label color ​

Use the color role on surface for adjacent text labels. This remains the same even if interacting with the label or component.

The large body text adjacent to switches uses "on surface" color and the body text uses "on surface variant."

The text label uses on surface. Supporting text may use on surface variant.

States ​

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

5 states of a switch shown in light and dark themes.

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

State specs are in the token module above

Measurements ​

Measurements of switches without icons.

Switches without icons

Measurements of pressed switches without icons.

Pressed switches without icons

Measurements of switches with icons.

Switches with icons

Measurements of pressed switches with icons.

Pressed switches with icons

ElementAttributeValue
TrackHeight32dp
TrackWidth52dp
TrackOutline width2dp
TrackShapemd.sys.shape.corner.full
HandleHeight (unselected)16dp
HandleHeight - with icon24dp
HandleHeight (selected)24dp
HandleHeight (pressed)28dp
HandleWidth (unselected)16dp
HandleWidth - with icon24dp
HandleWidth (selected)24dp
HandleWidth (pressed)28dp
HandleShapemd.sys.shape.corner.full
State layerSize40dp
State layerShapemd.sys.shape.corner.full
TargetSize48dp
IconSize (selected)16dp
IconSize (unselected)16dp

Configurations ​

  1. Without icons
  2. Icon on selected switch
  3. Icon on selected and unselected switch

3 example switches with and without icons in on and off states.

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