theme.md 4.0 KB
Newer Older
D
DCloud_LXH 已提交
1 2 3
## uni.setAppTheme(options) @setapptheme

<!-- UTSAPIJSON.setAppTheme.description -->
DCloud-yyl's avatar
DCloud-yyl 已提交
4 5 6 7 8 9 10 11

uni.setAppTheme,并不会帮助开发者自动实现整个应用的亮/暗主题切换,它的作用是:
1. 根据[theme.json](../collocation/themejson.md),设置pages.json的亮/暗主题
2. 触发uni.onAppThemeChange,开发者和组件作者均可监听这个事件,自行响应将页面设置为对应的亮/暗风格。

当然组件作者也可以不监听onAppThemeChange,而是暴露主题切换API给开发者,由开发者监听主题切换,再调用组件的主题切换API。

目前uni-app x的内置组件和UI相关的API(比如showModal),并不会响应setAppTheme。组件是暴露了样式属性供开发者自行设置,Modal相关API目前没有样式设置,后续会升级支持。
D
DCloud_LXH 已提交
12

DCloud_iOS_XHY's avatar
DCloud_iOS_XHY 已提交
13 14
<!-- UTSAPIJSON.setAppTheme.compatibility -->

D
DCloud_LXH 已提交
15 16
<!-- UTSAPIJSON.setAppTheme.param -->

DCloud-yyl's avatar
DCloud-yyl 已提交
17 18
<!-- UTSAPIJSON.setAppTheme.returnValue -->

shutao-dc's avatar
shutao-dc 已提交
19 20 21 22
```uts
uni.setAppTheme({
  theme: "auto",
  success: function() {
shutao-dc's avatar
shutao-dc 已提交
23
    console.log("设置appTheme为 auto 成功")
shutao-dc's avatar
shutao-dc 已提交
24 25
  },
  fail: function(e: IAppThemeFail) {
shutao-dc's avatar
shutao-dc 已提交
26
    console.log("设置appTheme为 auto 失败,原因:", e.errMsg)
shutao-dc's avatar
shutao-dc 已提交
27 28 29
  }
})
```
D
DCloud_LXH 已提交
30 31 32

<!-- UTSAPIJSON.setAppTheme.tutorial -->

DCloud-yyl's avatar
DCloud-yyl 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
## uni.onAppThemeChange(callback) @onappthemechange

<!-- UTSAPIJSON.onAppThemeChange.description -->

**注意**  
- HBuilderX4.18版本为 [uni.setAppTheme](#setapptheme) 设置的 theme 值变化时触发监听回调,回调参数中的 appTheme 值可能是"light" | "dark" | "auto"。在 app 平台设置应用的 theme 值为 auto 后,需同时使用 [uni.onOsThemeChange](#onOsThemeChange) 监听系统主题变化来计算应用使用的主题。  
- HBuilderX4.19版本调整为 应用实际计算后使用的主题值发生变化时才触发监听回调,回调参数中的 appTheme 值只可能是"light" | "dark"。 在 app 平台设置应用的 theme 值为 auto 后,当系统主题发生变化时会自动计算决定是否触发回调,也就是说无需使用 [uni.onOsThemeChange](#onOsThemeChange) 监听系统主题变化。  

<!-- UTSAPIJSON.onAppThemeChange.compatibility -->

<!-- UTSAPIJSON.onAppThemeChange.param -->

<!-- UTSAPIJSON.onAppThemeChange.returnValue -->

```uts
//callbackId 用于注销监听
val callbackId = uni.onAppThemeChange((res: AppThemeChangeResult) => {
  console.log("onAppThemeChange", res.appTheme)
})
```

<!-- UTSAPIJSON.onAppThemeChange.tutorial -->

## uni.offAppThemeChange(id) @offappthemechange

<!-- UTSAPIJSON.offAppThemeChange.description -->

<!-- UTSAPIJSON.offAppThemeChange.compatibility -->

<!-- UTSAPIJSON.offAppThemeChange.param -->

<!-- UTSAPIJSON.offAppThemeChange.returnValue -->

```uts
val callbackId = uni.onAppThemeChange((res: AppThemeChangeResult) => {
  console.log("onAppThemeChange", res.appTheme)
})
//...
//...
//注销监听
uni.offAppThemeChange(this.appThemeChangeId)
```

<!-- UTSAPIJSON.offAppThemeChange.tutorial -->

D
DCloud_LXH 已提交
78 79 80 81
## uni.onOsThemeChange(callback) @onosthemechange

<!-- UTSAPIJSON.onOsThemeChange.description -->

DCloud_iOS_XHY's avatar
DCloud_iOS_XHY 已提交
82 83
<!-- UTSAPIJSON.onOsThemeChange.compatibility -->

D
DCloud_LXH 已提交
84 85
<!-- UTSAPIJSON.onOsThemeChange.param -->

DCloud-yyl's avatar
DCloud-yyl 已提交
86 87
<!-- UTSAPIJSON.onOsThemeChange.returnValue -->

shutao-dc's avatar
shutao-dc 已提交
88
```uts
DCloud-yyl's avatar
DCloud-yyl 已提交
89
//callbackId 用于注销监听
shutao-dc's avatar
shutao-dc 已提交
90 91 92 93
val callbackId = uni.onOsThemeChange((res: OsThemeChangeResult)=> {
    console.log("onOsThemeChange---", res.osTheme)
})
```
D
DCloud_LXH 已提交
94

DCloud-yyl's avatar
DCloud-yyl 已提交
95 96
<!-- UTSAPIJSON.onOsThemeChange.tutorial -->

shutao-dc's avatar
shutao-dc 已提交
97
**注意:**
W
wanganxp 已提交
98
+ android 10、iOS 13 才开始支持深色模式主题 `dark`,更低版本无法获取、监听OS的主题。
D
DCloud_LXH 已提交
99 100 101 102 103

## uni.offOsThemeChange(id) @offosthemechange

<!-- UTSAPIJSON.offOsThemeChange.description -->

DCloud_iOS_XHY's avatar
DCloud_iOS_XHY 已提交
104 105
<!-- UTSAPIJSON.offOsThemeChange.compatibility -->

D
DCloud_LXH 已提交
106 107
<!-- UTSAPIJSON.offOsThemeChange.param -->

DCloud-yyl's avatar
DCloud-yyl 已提交
108 109 110
<!-- UTSAPIJSON.offOsThemeChange.returnValue -->

```uts
shutao-dc's avatar
shutao-dc 已提交
111 112
val callbackId = uni.onOsThemeChange((res: OsThemeChangeResult)=> {
    console.log("onOsThemeChange---", res.osTheme)
DCloud-yyl's avatar
DCloud-yyl 已提交
113 114 115 116 117
})
...
...
//注销监听
uni.offOsThemeChange(callbackId)
shutao-dc's avatar
shutao-dc 已提交
118
```
shutao-dc's avatar
shutao-dc 已提交
119

shutao-dc's avatar
shutao-dc 已提交
120
<!-- UTSAPIJSON.offOsThemeChange.tutorial -->
D
DCloud_LXH 已提交
121 122 123

<!-- UTSAPIJSON.general_type.name -->

DCloud_iOS_XHY's avatar
DCloud_iOS_XHY 已提交
124
<!-- UTSAPIJSON.general_type.param -->