• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 按钮
2
3
4Button是按钮组件,通常用于响应用户的点击操作,其类型包括胶囊按钮、圆形按钮、普通按钮。Button当做为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮。具体用法请参考[Button](../reference/arkui-ts/ts-basic-components-button.md)。
5
6
7## 创建按钮
8
9Button通过调用接口来创建,接口调用有以下两种形式:
10
11
12- 创建不包含子组件的按钮。
13
14  ```ts
15  Button(label?: string, options?: { type?: ButtonType, stateEffect?: boolean })
16  ```
17
18  该接口用于创建不包含子组件的按钮,其中label用来设置按钮文字,type用于设置Button类型,stateEffect属性设置Button是否开启点击效果。
19
20  ```ts
21  Button('Ok', { type: ButtonType.Normal, stateEffect: true })
22    .borderRadius(8)
23    .backgroundColor(0x317aff)
24    .width(90)
25    .height(40)
26  ```
27
28  ![zh-cn_image_0000001562820757](figures/zh-cn_image_0000001562820757.png)
29
30
31- 创建包含子组件的按钮。
32
33  ```ts
34  Button(options?: {type?: ButtonType, stateEffect?: boolean})
35  ```
36
37  该接口用于创建包含子组件的按钮,只支持包含一个子组件,子组件可以是[基础组件](../reference/arkui-ts/ts-basic-components-blank.md)或者[容器组件](../reference/arkui-ts/ts-container-ability-component.md)。
38
39  ```ts
40  Button({ type: ButtonType.Normal, stateEffect: true }) {
41    Row() {
42      Image($r('app.media.loading')).width(20).height(40).margin({ left: 12 })
43      Text('loading').fontSize(12).fontColor(0xffffff).margin({ left: 5, right: 12 })
44    }.alignItems(VerticalAlign.Center)
45  }.borderRadius(8).backgroundColor(0x317aff).width(90).height(40)
46  ```
47
48  ![zh-cn_image_0000001511421216](figures/zh-cn_image_0000001511421216.png)
49
50
51## 设置按钮类型
52
53Button有三种可选类型,分别为Capsule(胶囊类型)、Circle(圆形按钮)和Normal(普通按钮),通过type进行设置。
54
55
56- 胶囊按钮(默认类型)
57  此类型按钮的圆角自动设置为高度的一半,不支持通过borderRadius属性重新设置圆角。
58
59  ```ts
60  Button('Disable', { type: ButtonType.Capsule, stateEffect: false })
61    .backgroundColor(0x317aff)
62    .width(90)
63    .height(40)
64  ```
65
66  ![zh-cn_image_0000001511421208](figures/zh-cn_image_0000001511421208.png)
67
68
69- 圆形按钮
70  此类型按钮为圆形,不支持通过borderRadius属性重新设置圆角。
71
72  ```ts
73  Button('Circle', { type: ButtonType.Circle, stateEffect: false })
74    .backgroundColor(0x317aff)
75    .width(90)
76    .height(90)
77  ```
78
79  ![zh-cn_image_0000001511740428](figures/zh-cn_image_0000001511740428.png)
80
81- 普通按钮
82  此类型的按钮默认圆角为0,支持通过borderRadius属性重新设置圆角。
83
84  ```ts
85  Button('Ok', { type: ButtonType.Normal, stateEffect: true })
86    .borderRadius(8)
87    .backgroundColor(0x317aff)
88    .width(90)
89    .height(40)
90  ```
91
92  ![zh-cn_image_0000001563060641](figures/zh-cn_image_0000001563060641.png)
93
94
95## 自定义样式
96
97- 设置边框弧度。
98  一般使用通用属性来自定义按钮样式。例如通过borderRadius属性设置按钮的边框弧度。
99
100  ```ts
101  Button('circle border', { type: ButtonType.Normal })
102    .borderRadius(20)
103    .height(40)
104  ```
105
106  ![zh-cn_image_0000001511900392](figures/zh-cn_image_0000001511900392.png)
107
108
109- 设置文本样式。
110  通过添加文本样式设置按钮文本的展示样式。
111
112  ```ts
113  Button('font style', { type: ButtonType.Normal })
114    .fontSize(20)
115    .fontColor(Color.Pink)
116    .fontWeight(800)
117  ```
118
119  ![zh-cn_image_0000001511580828](figures/zh-cn_image_0000001511580828.png)
120
121
122- 设置背景颜色。
123  添加backgroundColor属性设置按钮的背景颜色。
124
125  ```ts
126  Button('background color').backgroundColor(0xF55A42)
127  ```
128
129  ![zh-cn_image_0000001562940477](figures/zh-cn_image_0000001562940477.png)
130
131
132- 用作功能型按钮。
133  为删除操作创建一个按钮。
134
135  ```ts
136  Button({ type: ButtonType.Circle, stateEffect: true }) {
137    Image($r('app.media.ic_public_delete_filled')).width(30).height(30)
138  }.width(55).height(55).margin({ left: 20 }).backgroundColor(0xF55A42)
139  ```
140
141  ![zh-cn_image_0000001511740436](figures/zh-cn_image_0000001511740436.png)
142
143
144## 添加事件
145
146Button组件通常用于触发某些操作,可以绑定onClick事件来响应点击操作后的自定义行为。
147
148```ts
149Button('Ok', { type: ButtonType.Normal, stateEffect: true })
150  .onClick(()=>{
151    console.info('Button onClick')
152  })
153```
154
155
156## 场景示例
157
158- 用于启动操作。
159  可以用按钮启动任何用户界面元素,按钮会根据用户的操作触发相应的事件。例如,在List容器里通过点击按钮进行页面跳转。
160
161  ```ts
162  // xxx.ets
163  import router from '@ohos.router';
164  @Entry
165  @Component
166  struct ButtonCase1 {
167    build() {
168      List({ space: 4 }) {
169        ListItem() {
170          Button("First").onClick(() => {
171            router.pushUrl({ url: 'pages/first_page' })
172          })
173            .width('100%')
174        }
175        ListItem() {
176          Button("Second").onClick(() => {
177            router.pushUrl({ url: 'pages/second_page' })
178          })
179            .width('100%')
180        }
181        ListItem() {
182          Button("Third").onClick(() => {
183            router.pushUrl({ url: 'pages/third_page' })
184          })
185            .width('100%')
186        }
187      }
188      .listDirection(Axis.Vertical)
189      .backgroundColor(0xDCDCDC).padding(20)
190    }
191  }
192  ```
193
194  ![zh-cn_image_0000001562700393](figures/zh-cn_image_0000001562700393.png)
195
196
197- 用于表单的提交。
198  在用户登录/注册页面,使用按钮进行登录或注册操作。
199
200  ```ts
201  // xxx.ets
202  @Entry
203  @Component
204  struct ButtonCase2 {
205    build() {
206      Column() {
207        TextInput({ placeholder: 'input your username' }).margin({ top: 20 })
208        TextInput({ placeholder: 'input your password' }).type(InputType.Password).margin({ top: 20 })
209        Button('Register').width(300).margin({ top: 20 })
210          .onClick(() => {
211            // 需要执行的操作
212          })
213      }.padding(20)
214    }
215  }
216  ```
217
218  ![zh-cn_image_0000001562940473](figures/zh-cn_image_0000001562940473.png)
219
220- 悬浮按钮
221  在可以滑动的界面,滑动时按钮始终保持悬浮状态。
222
223  ```ts
224  // xxx.ets
225  @Entry
226  @Component
227  struct HoverButtonExample {
228    private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
229    build() {
230      Stack() {
231        List({ space: 20, initialIndex: 0 }) {
232          ForEach(this.arr, (item) => {
233            ListItem() {
234              Text('' + item)
235                .width('100%').height(100).fontSize(16)
236                .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
237            }
238          }, item => item)
239        }.width('90%')
240        Button() {
241          Image($r('app.media.ic_public_add'))
242            .width(50)
243            .height(50)
244        }
245        .width(60)
246        .height(60)
247        .position({x: '80%', y: 600})
248        .shadow({radius: 10})
249        .onClick(() => {
250          // 需要执行的操作
251        })
252      }
253      .width('100%')
254      .height('100%')
255      .backgroundColor(0xDCDCDC)
256      .padding({ top: 5 })
257    }
258  }
259  ```
260
261  ![GIF](figures/GIF.gif)
262