1e41f4b71Sopenharmony_ci# WithTheme 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciThe **WithTheme** component is designed to customize the theme style for a specific part of an application page. It allows for the setting of light and dark modes for child components, as well as the use of custom color schemes. 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci> **NOTE** 6e41f4b71Sopenharmony_ci> 7e41f4b71Sopenharmony_ci> This component is supported since API version 12. Updates will be marked with a superscript to indicate their earliest API version. 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci## Child Components 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ciThis component supports only one child component. 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci## APIs 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ciWithTheme(options: WithThemeOptions) 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci**Parameters** 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci| Name | Type | Mandatory | Description | 20e41f4b71Sopenharmony_ci|--------------------------------|---------------------------------------|-----|---------------| 21e41f4b71Sopenharmony_ci| options | [WithThemeOptions](#withthemeoptions) | Yes | Color scheme for components within the scope.| 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci## Attributes 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ciThe [universal attributes](ts-universal-attributes-size.md) are not supported. 26e41f4b71Sopenharmony_ci 27e41f4b71Sopenharmony_ci## Events 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ciThe [universal events](ts-universal-events-click.md) are not supported. 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci## WithThemeOptions 32e41f4b71Sopenharmony_ciDefines the default theme and color mode for components within the **WithTheme** scope. 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci**Atomic service API**: This API can be used in atomic services since API version 12. 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci**Parameters** 37e41f4b71Sopenharmony_ci 38e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 39e41f4b71Sopenharmony_ci|------------------------|---------------------------------------------------------| ---- |------------------------------------------------------------------| 40e41f4b71Sopenharmony_ci| theme | [CustomTheme](../js-apis-arkui-theme.md#customtheme) | No | Default theme for components in the **WithTheme** scope.<br> Default value: **undefined**, indicating that the styles will follow the system's default theme.<br>| 41e41f4b71Sopenharmony_ci| colorMode | [ThemeColorMode](ts-appendix-enums.md#themecolormode10) | No | Color mode for components in the **WithTheme** scope.<br>Default value: **ThemeColorMode.System**<br> | 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci## Example 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ciThis example demonstrates how to use **WithTheme** to set the color mode, which is effective only when a **dark.json** resource file is included. 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ciExample of the **dark.json** file content: 50e41f4b71Sopenharmony_ci ```ts 51e41f4b71Sopenharmony_ci { 52e41f4b71Sopenharmony_ci "color": [ 53e41f4b71Sopenharmony_ci { 54e41f4b71Sopenharmony_ci "name": "start_window_background", 55e41f4b71Sopenharmony_ci "value": "#FFFFFF" 56e41f4b71Sopenharmony_ci } 57e41f4b71Sopenharmony_ci ] 58e41f4b71Sopenharmony_ci } 59e41f4b71Sopenharmony_ci ``` 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_ci```ts 62e41f4b71Sopenharmony_ci// Specify the local color mode. 63e41f4b71Sopenharmony_ci@Entry 64e41f4b71Sopenharmony_ci@Component 65e41f4b71Sopenharmony_cistruct Index { 66e41f4b71Sopenharmony_ci build() { 67e41f4b71Sopenharmony_ci Column() { 68e41f4b71Sopenharmony_ci // System default 69e41f4b71Sopenharmony_ci Column() { 70e41f4b71Sopenharmony_ci Text('WithTheme not used') 71e41f4b71Sopenharmony_ci .fontSize(40) 72e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 73e41f4b71Sopenharmony_ci } 74e41f4b71Sopenharmony_ci .justifyContent(FlexAlign.Center) 75e41f4b71Sopenharmony_ci .width('100%') 76e41f4b71Sopenharmony_ci .height('33%') 77e41f4b71Sopenharmony_ci .backgroundColor($r('sys.color.background_primary')) 78e41f4b71Sopenharmony_ci // Set the component to the dark mode. 79e41f4b71Sopenharmony_ci WithTheme({ colorMode: ThemeColorMode.DARK }) { 80e41f4b71Sopenharmony_ci Column() { 81e41f4b71Sopenharmony_ci Text('WithTheme') 82e41f4b71Sopenharmony_ci .fontSize(40) 83e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 84e41f4b71Sopenharmony_ci Text('DARK') 85e41f4b71Sopenharmony_ci .fontSize(40) 86e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 87e41f4b71Sopenharmony_ci } 88e41f4b71Sopenharmony_ci .justifyContent(FlexAlign.Center) 89e41f4b71Sopenharmony_ci .width('100%') 90e41f4b71Sopenharmony_ci .height('33%') 91e41f4b71Sopenharmony_ci .backgroundColor($r('sys.color.background_primary')) 92e41f4b71Sopenharmony_ci } 93e41f4b71Sopenharmony_ci // Set the component to the light mode. 94e41f4b71Sopenharmony_ci WithTheme({ colorMode: ThemeColorMode.LIGHT }) { 95e41f4b71Sopenharmony_ci Column() { 96e41f4b71Sopenharmony_ci Text('WithTheme') 97e41f4b71Sopenharmony_ci .fontSize(40) 98e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 99e41f4b71Sopenharmony_ci Text('LIGHT') 100e41f4b71Sopenharmony_ci .fontSize(40) 101e41f4b71Sopenharmony_ci .fontWeight(FontWeight.Bold) 102e41f4b71Sopenharmony_ci } 103e41f4b71Sopenharmony_ci .justifyContent(FlexAlign.Center) 104e41f4b71Sopenharmony_ci .width('100%') 105e41f4b71Sopenharmony_ci .height('33%') 106e41f4b71Sopenharmony_ci .backgroundColor($r('sys.color.background_primary')) 107e41f4b71Sopenharmony_ci } 108e41f4b71Sopenharmony_ci } 109e41f4b71Sopenharmony_ci .height('100%') 110e41f4b71Sopenharmony_ci .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.END, SafeAreaEdge.BOTTOM, SafeAreaEdge.START]) 111e41f4b71Sopenharmony_ci } 112e41f4b71Sopenharmony_ci} 113e41f4b71Sopenharmony_ci``` 114e41f4b71Sopenharmony_ci 115e41f4b71Sopenharmony_ci 116e41f4b71Sopenharmony_ci```ts 117e41f4b71Sopenharmony_ci// Customize the default theme for components in the WithTheme scope. 118e41f4b71Sopenharmony_ciimport { CustomTheme, CustomColors } from '@kit.ArkUI'; 119e41f4b71Sopenharmony_ci 120e41f4b71Sopenharmony_ciclass GreenColors implements CustomColors { 121e41f4b71Sopenharmony_ci fontPrimary = '#ff049404'; 122e41f4b71Sopenharmony_ci fontEmphasize = '#FF00541F'; 123e41f4b71Sopenharmony_ci fontOnPrimary = '#FFFFFFFF'; 124e41f4b71Sopenharmony_ci compBackgroundTertiary = '#1111FF11'; 125e41f4b71Sopenharmony_ci backgroundEmphasize = '#FF00541F'; 126e41f4b71Sopenharmony_ci compEmphasizeSecondary = '#3322FF22'; 127e41f4b71Sopenharmony_ci} 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ciclass RedColors implements CustomColors { 130e41f4b71Sopenharmony_ci fontPrimary = '#fff32b3c'; 131e41f4b71Sopenharmony_ci fontEmphasize = '#FFD53032'; 132e41f4b71Sopenharmony_ci fontOnPrimary = '#FFFFFFFF'; 133e41f4b71Sopenharmony_ci compBackgroundTertiary = '#44FF2222'; 134e41f4b71Sopenharmony_ci backgroundEmphasize = '#FFD00000'; 135e41f4b71Sopenharmony_ci compEmphasizeSecondary = '#33FF1111'; 136e41f4b71Sopenharmony_ci} 137e41f4b71Sopenharmony_ci 138e41f4b71Sopenharmony_ciclass PageCustomTheme implements CustomTheme { 139e41f4b71Sopenharmony_ci colors?: CustomColors 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci constructor(colors: CustomColors) { 142e41f4b71Sopenharmony_ci this.colors = colors 143e41f4b71Sopenharmony_ci } 144e41f4b71Sopenharmony_ci} 145e41f4b71Sopenharmony_ci 146e41f4b71Sopenharmony_ci@Entry 147e41f4b71Sopenharmony_ci@Component 148e41f4b71Sopenharmony_cistruct IndexPage { 149e41f4b71Sopenharmony_ci static readonly themeCount = 3; 150e41f4b71Sopenharmony_ci themeNames: string[] = ['System', 'Custom (green)', 'Custom (red)']; 151e41f4b71Sopenharmony_ci themeArray: (CustomTheme | undefined)[] = [ 152e41f4b71Sopenharmony_ci undefined, // System 153e41f4b71Sopenharmony_ci new PageCustomTheme(new GreenColors()), 154e41f4b71Sopenharmony_ci new PageCustomTheme(new RedColors()) 155e41f4b71Sopenharmony_ci ] 156e41f4b71Sopenharmony_ci @State themeIndex: number = 0; 157e41f4b71Sopenharmony_ci 158e41f4b71Sopenharmony_ci build() { 159e41f4b71Sopenharmony_ci Column() { 160e41f4b71Sopenharmony_ci Column({ space: '8vp' }) { 161e41f4b71Sopenharmony_ci Text('WithTheme not used') 162e41f4b71Sopenharmony_ci // Click the button to change the theme. 163e41f4b71Sopenharmony_ci Button(`Switch Theme: ${this.themeNames[this.themeIndex]}`) 164e41f4b71Sopenharmony_ci .onClick(() => { 165e41f4b71Sopenharmony_ci this.themeIndex = (this.themeIndex + 1) % IndexPage.themeCount; 166e41f4b71Sopenharmony_ci }) 167e41f4b71Sopenharmony_ci 168e41f4b71Sopenharmony_ci // Default button color 169e41f4b71Sopenharmony_ci Button('Button.style(NORMAL) with System Theme') 170e41f4b71Sopenharmony_ci .buttonStyle(ButtonStyleMode.NORMAL) 171e41f4b71Sopenharmony_ci Button('Button.style(EMP..ED) with System Theme') 172e41f4b71Sopenharmony_ci .buttonStyle(ButtonStyleMode.EMPHASIZED) 173e41f4b71Sopenharmony_ci Button('Button.style(TEXTUAL) with System Theme') 174e41f4b71Sopenharmony_ci .buttonStyle(ButtonStyleMode.TEXTUAL) 175e41f4b71Sopenharmony_ci } 176e41f4b71Sopenharmony_ci .margin({ 177e41f4b71Sopenharmony_ci top: '50vp' 178e41f4b71Sopenharmony_ci }) 179e41f4b71Sopenharmony_ci 180e41f4b71Sopenharmony_ci WithTheme({ theme: this.themeArray[this.themeIndex] }) { 181e41f4b71Sopenharmony_ci // WithTheme scope 182e41f4b71Sopenharmony_ci Column({ space: '8vp' }) { 183e41f4b71Sopenharmony_ci Text('WithTheme used') 184e41f4b71Sopenharmony_ci Button('Button.style(NORMAL) with Custom Theme') 185e41f4b71Sopenharmony_ci .buttonStyle(ButtonStyleMode.NORMAL) 186e41f4b71Sopenharmony_ci Button('Button.style(EMP..ED) with Custom Theme') 187e41f4b71Sopenharmony_ci .buttonStyle(ButtonStyleMode.EMPHASIZED) 188e41f4b71Sopenharmony_ci Button('Button.style(TEXTUAL) with Custom Theme') 189e41f4b71Sopenharmony_ci .buttonStyle(ButtonStyleMode.TEXTUAL) 190e41f4b71Sopenharmony_ci } 191e41f4b71Sopenharmony_ci .width('100%') 192e41f4b71Sopenharmony_ci } 193e41f4b71Sopenharmony_ci } 194e41f4b71Sopenharmony_ci } 195e41f4b71Sopenharmony_ci} 196e41f4b71Sopenharmony_ci``` 197e41f4b71Sopenharmony_ci 198