• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 切换按钮 (Toggle)
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @houguobiao-->
5<!--Designer: @houguobiao-->
6<!--Tester: @lxl007-->
7<!--Adviser: @HelloCrease-->
8
9
10Toggle组件提供状态按钮样式、勾选框样式和开关样式,一般用于两种状态之间的切换。具体用法请参考[Toggle](../reference/apis-arkui/arkui-ts/ts-basic-components-toggle.md)。
11
12
13## 创建切换按钮
14
15Toggle通过调用[ToggleOptions](../reference/apis-arkui/arkui-ts/ts-basic-components-toggle.md#toggleoptions18对象说明)来创建,具体调用形式如下:
16
17```ts
18Toggle(options: { type: ToggleType, isOn?: boolean })
19```
20
21其中,ToggleType为开关类型,包括Button、Checkbox和Switch,isOn为切换按钮的状态。
22
23API version 11开始,Checkbox默认样式由圆角方形变为圆形。
24
25接口调用有以下两种形式:
26
27
28- 创建不包含子组件的Toggle。
29  当ToggleType为Checkbox或者Switch时,用于创建不包含子组件的Toggle:
30
31
32    ```ts
33  Toggle({ type: ToggleType.Checkbox, isOn: false })
34  Toggle({ type: ToggleType.Checkbox, isOn: true })
35    ```
36
37  ![zh-cn_image_0000001562940485](figures/zh-cn_image_0000001562940485.png)
38
39  ```ts
40  Toggle({ type: ToggleType.Switch, isOn: false })
41  Toggle({ type: ToggleType.Switch, isOn: true })
42  ```
43
44    ![zh-cn_image_0000001511421228](figures/zh-cn_image_0000001511421228.png)
45
46- 创建包含子组件的Toggle。
47
48  当ToggleType为Button时,只能包含一个子组件,如果子组件有文本设置,则相应的文本内容会显示在按钮上。
49
50  ```ts
51  Toggle({ type: ToggleType.Button, isOn: false }) {
52    Text('status button')
53      .fontColor('#182431')
54      .fontSize(12)
55  }.width(100)
56  Toggle({ type: ToggleType.Button, isOn: true }) {
57    Text('status button')
58      .fontColor('#182431')
59      .fontSize(12)
60  }.width(100)
61  ```
62
63    ![zh-cn_image_0000001511900404](figures/zh-cn_image_0000001511900404.png)
64
65
66## 自定义样式
67
68- 通过selectedColor属性设置Toggle打开选中后的背景颜色。
69
70  ```ts
71  Toggle({ type: ToggleType.Button, isOn: true }) {
72    Text('status button')
73    .fontColor('#182431')
74    .fontSize(12)
75  }.width(100).selectedColor(Color.Pink)
76  Toggle({ type: ToggleType.Checkbox, isOn: true })
77    .selectedColor(Color.Pink)
78  Toggle({ type: ToggleType.Switch, isOn: true })
79    .selectedColor(Color.Pink)
80  ```
81
82  ![zh-cn_image_0000001563060657](figures/zh-cn_image_0000001563060657.png)
83
84- 通过switchPointColor属性设置Switch类型的圆形滑块颜色,仅对type为ToggleType.Switch生效。
85
86  ```ts
87  Toggle({ type: ToggleType.Switch, isOn: false })
88    .switchPointColor(Color.Pink)
89  Toggle({ type: ToggleType.Switch, isOn: true })
90    .switchPointColor(Color.Pink)
91  ```
92
93  ![zh-cn_image_0000001511421232](figures/zh-cn_image_0000001511421232.png)
94
95
96## 添加事件
97
98除支持[通用事件](../reference/apis-arkui/arkui-ts/ts-component-general-events.md)外,Toggle还用于选中和取消选中后触发某些操作,可以绑定onChange事件来响应操作后的自定义行为。
99
100
101```ts
102Toggle({ type: ToggleType.Switch, isOn: false })
103  .onChange((isOn: boolean) => {
104      if(isOn) {
105        // 需要执行的操作
106      }
107  })
108```
109
110
111## 场景示例
112
113Toggle用于切换蓝牙开关状态。
114
115```ts
116// xxx.ets
117import { promptAction } from '@kit.ArkUI';
118
119@Entry
120@Component
121struct ToggleExample {
122  @State bOnSt: promptAction.ShowToastOptions = { 'message': 'Bluetooth is on.' };
123  @State bOffSt: promptAction.ShowToastOptions = { 'message': 'Bluetooth is off.' };
124
125  build() {
126    Column() {
127      Row() {
128        Text("Bluetooth Mode")
129          .height(50)
130          .fontSize(16)
131      }
132
133      Row() {
134        Text("Bluetooth")
135          .height(50)
136          .padding({ left: 10 })
137          .fontSize(16)
138          .textAlign(TextAlign.Start)
139          .backgroundColor(0xFFFFFF)
140        Toggle({ type: ToggleType.Switch })
141          .margin({ left: 200, right: 10 })
142          .onChange((isOn: boolean) => {
143            if (isOn) {
144              this.getUIContext().getPromptAction().showToast(this.bOnSt);
145            } else {
146              this.getUIContext().getPromptAction().showToast(this.bOffSt);
147            }
148          })
149      }
150      .backgroundColor(0xFFFFFF)
151    }
152    .padding(10)
153    .backgroundColor(0xDCDCDC)
154    .width('100%')
155    .height('100%')
156  }
157}
158```
159
160
161![zh-cn_image_0000001511740448](figures/zh-cn_image_0000001511740448.gif)
162