1e41f4b71Sopenharmony_ci# \<button> Development 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciThe **\<button>** component can be used to set a capsule, circle, text, arc, or download button. For details, see [button](../reference/apis-arkui/arkui-js/js-components-basic-button.md). 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci## Creating a \<button> Component 7e41f4b71Sopenharmony_ci 8e41f4b71Sopenharmony_ciCreate a **\<button>** component in the .hml file under **pages/index**. 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci```html 11e41f4b71Sopenharmony_ci<!-- xxx.hml --> 12e41f4b71Sopenharmony_ci<div class="container"> 13e41f4b71Sopenharmony_ci <button type="capsule" value="Capsule button"></button> 14e41f4b71Sopenharmony_ci</div> 15e41f4b71Sopenharmony_ci``` 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci```css 18e41f4b71Sopenharmony_ci/* xxx.css */ 19e41f4b71Sopenharmony_ci.container { 20e41f4b71Sopenharmony_ci width: 100%; 21e41f4b71Sopenharmony_ci height: 100%; 22e41f4b71Sopenharmony_ci flex-direction: column; 23e41f4b71Sopenharmony_ci justify-content: center; 24e41f4b71Sopenharmony_ci align-items: center; 25e41f4b71Sopenharmony_ci background-color: #F1F3F5; 26e41f4b71Sopenharmony_ci} 27e41f4b71Sopenharmony_ci``` 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci## Setting the Button Type 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ciSet the **type** attribute of the **\<button>** component to **circle**, **text**, or any other supported value. 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci```html 38e41f4b71Sopenharmony_ci<!-- xxx.hml --> 39e41f4b71Sopenharmony_ci<div class="container"> 40e41f4b71Sopenharmony_ci <button class="circle" type="circle" >+</button> 41e41f4b71Sopenharmony_ci <button class="text" type="text"> button</button> 42e41f4b71Sopenharmony_ci</div> 43e41f4b71Sopenharmony_ci``` 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci 46e41f4b71Sopenharmony_ci```css 47e41f4b71Sopenharmony_ci/* xxx.css */ 48e41f4b71Sopenharmony_ci.container { 49e41f4b71Sopenharmony_ci width: 100%; 50e41f4b71Sopenharmony_ci height: 100%; 51e41f4b71Sopenharmony_ci background-color: #F1F3F5; 52e41f4b71Sopenharmony_ci flex-direction: column; 53e41f4b71Sopenharmony_ci align-items: center; 54e41f4b71Sopenharmony_ci justify-content: center; 55e41f4b71Sopenharmony_ci} 56e41f4b71Sopenharmony_ci.circle { 57e41f4b71Sopenharmony_ci font-size: 120px; 58e41f4b71Sopenharmony_ci background-color: blue; 59e41f4b71Sopenharmony_ci radius: 72px; 60e41f4b71Sopenharmony_ci} 61e41f4b71Sopenharmony_ci.text { 62e41f4b71Sopenharmony_ci margin-top: 30px; 63e41f4b71Sopenharmony_ci text-color: white; 64e41f4b71Sopenharmony_ci font-size: 30px; 65e41f4b71Sopenharmony_ci font-style: normal; 66e41f4b71Sopenharmony_ci background-color: blue; 67e41f4b71Sopenharmony_ci width: 50%; 68e41f4b71Sopenharmony_ci height: 100px; 69e41f4b71Sopenharmony_ci} 70e41f4b71Sopenharmony_ci``` 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ci> **NOTE** 77e41f4b71Sopenharmony_ci> 78e41f4b71Sopenharmony_ci>If the icon used by the **\<button>** component is from the cloud, you must declare the **ohos.permission.INTERNET** permission in the **config.json** file under the **resources** folder. 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ciSample code for declaring the **ohos.permission.INTERNET** permission in the **config.json** file under the **resources** folder: 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ci 84e41f4b71Sopenharmony_ci``` 85e41f4b71Sopenharmony_ci<!-- config.json --> 86e41f4b71Sopenharmony_ci"module": { 87e41f4b71Sopenharmony_ci "reqPermissions": [{ 88e41f4b71Sopenharmony_ci "name": "ohos.permission.INTERNET" 89e41f4b71Sopenharmony_ci }], 90e41f4b71Sopenharmony_ci} 91e41f4b71Sopenharmony_ci``` 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci 94e41f4b71Sopenharmony_ci## Showing the Download Progress 95e41f4b71Sopenharmony_ci 96e41f4b71Sopenharmony_ciAdd the **progress** method to the **\<button>** component to display the download progress in real time. 97e41f4b71Sopenharmony_ci 98e41f4b71Sopenharmony_ci```html 99e41f4b71Sopenharmony_ci<!-- xxx.hml --> 100e41f4b71Sopenharmony_ci<div class="container"> 101e41f4b71Sopenharmony_ci <button class="button download" type="download" id="download-btn" onclick="setProgress">{{downloadText}}</button> 102e41f4b71Sopenharmony_ci</div> 103e41f4b71Sopenharmony_ci``` 104e41f4b71Sopenharmony_ci 105e41f4b71Sopenharmony_ci```css 106e41f4b71Sopenharmony_ci/* xxx.css */ 107e41f4b71Sopenharmony_ci.container { 108e41f4b71Sopenharmony_ci width: 100%; 109e41f4b71Sopenharmony_ci height: 100%; 110e41f4b71Sopenharmony_ci background-color: #F1F3F5; 111e41f4b71Sopenharmony_ci flex-direction: column; 112e41f4b71Sopenharmony_ci align-items: center; 113e41f4b71Sopenharmony_ci justify-content: center; 114e41f4b71Sopenharmony_ci} 115e41f4b71Sopenharmony_ci.download { 116e41f4b71Sopenharmony_ci width: 280px; 117e41f4b71Sopenharmony_ci text-color: white; 118e41f4b71Sopenharmony_ci background-color: #007dff; 119e41f4b71Sopenharmony_ci} 120e41f4b71Sopenharmony_ci``` 121e41f4b71Sopenharmony_ci 122e41f4b71Sopenharmony_ci```js 123e41f4b71Sopenharmony_ci// xxx.js 124e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction'; 125e41f4b71Sopenharmony_ciexport default { 126e41f4b71Sopenharmony_ci data: { 127e41f4b71Sopenharmony_ci percent: 0, 128e41f4b71Sopenharmony_ci downloadText: "Download", 129e41f4b71Sopenharmony_ci isPaused: true, 130e41f4b71Sopenharmony_ci intervalId : null, 131e41f4b71Sopenharmony_ci }, 132e41f4b71Sopenharmony_ci start(){ 133e41f4b71Sopenharmony_ci this.intervalId = setInterval(()=>{ 134e41f4b71Sopenharmony_ci if(this.percent <100){ 135e41f4b71Sopenharmony_ci this.percent += 1; 136e41f4b71Sopenharmony_ci this.downloadText = this.percent+ "%"; 137e41f4b71Sopenharmony_ci } else{ 138e41f4b71Sopenharmony_ci promptAction.showToast({ 139e41f4b71Sopenharmony_ci message: "Download succeeded." 140e41f4b71Sopenharmony_ci }) 141e41f4b71Sopenharmony_ci this.paused() 142e41f4b71Sopenharmony_ci this.downloadText = "Download"; 143e41f4b71Sopenharmony_ci this.percent = 0; 144e41f4b71Sopenharmony_ci this.isPaused = true; 145e41f4b71Sopenharmony_ci } 146e41f4b71Sopenharmony_ci },100) 147e41f4b71Sopenharmony_ci }, 148e41f4b71Sopenharmony_ci paused(){ 149e41f4b71Sopenharmony_ci clearInterval(this.intervalId); 150e41f4b71Sopenharmony_ci this.intervalId = null; 151e41f4b71Sopenharmony_ci }, 152e41f4b71Sopenharmony_ci setProgress(e) { 153e41f4b71Sopenharmony_ci if(this.isPaused){ 154e41f4b71Sopenharmony_ci promptAction.showToast({ 155e41f4b71Sopenharmony_ci message: "Started Downloading" 156e41f4b71Sopenharmony_ci }) 157e41f4b71Sopenharmony_ci this.start(); 158e41f4b71Sopenharmony_ci this.isPaused = false; 159e41f4b71Sopenharmony_ci }else{ 160e41f4b71Sopenharmony_ci promptAction.showToast({ 161e41f4b71Sopenharmony_ci message: "Paused." 162e41f4b71Sopenharmony_ci }) 163e41f4b71Sopenharmony_ci this.paused(); 164e41f4b71Sopenharmony_ci this.isPaused = true; 165e41f4b71Sopenharmony_ci } 166e41f4b71Sopenharmony_ci } 167e41f4b71Sopenharmony_ci} 168e41f4b71Sopenharmony_ci``` 169e41f4b71Sopenharmony_ci 170e41f4b71Sopenharmony_ci 171e41f4b71Sopenharmony_ci 172e41f4b71Sopenharmony_ci> **NOTE** 173e41f4b71Sopenharmony_ci> 174e41f4b71Sopenharmony_ci> The **setProgress** method supports only buttons of the download type. 175e41f4b71Sopenharmony_ci 176e41f4b71Sopenharmony_ci 177e41f4b71Sopenharmony_ci## Example Scenario 178e41f4b71Sopenharmony_ci 179e41f4b71Sopenharmony_ciSwitch between the button types for different types of text. 180e41f4b71Sopenharmony_ci 181e41f4b71Sopenharmony_ci 182e41f4b71Sopenharmony_ci```html 183e41f4b71Sopenharmony_ci<!-- xxx.hml --> 184e41f4b71Sopenharmony_ci<div class="container"> 185e41f4b71Sopenharmony_ci <div class="input-item"> 186e41f4b71Sopenharmony_ci <input class="input-text" id="change" type="{{mytype}}" placeholder="{{myholder}}" 187e41f4b71Sopenharmony_ci style="background-color:{{mystyle1}}; 188e41f4b71Sopenharmony_ci placeholder-color:{{mystyle2}};flex-grow:{{myflex}};"name="{{myname}}" value="{{myvalue}}"></input> 189e41f4b71Sopenharmony_ci </div> 190e41f4b71Sopenharmony_ci <div class="input-item"> 191e41f4b71Sopenharmony_ci <div class="doc-row"> 192e41f4b71Sopenharmony_ci <input type="button" class="select-button color-3" value="text" onclick="changetype3"></input> 193e41f4b71Sopenharmony_ci <input type="button" class="select-button color-3" value="data" onclick="changetype4"></input> 194e41f4b71Sopenharmony_ci </div> 195e41f4b71Sopenharmony_ci </div> 196e41f4b71Sopenharmony_ci</div> 197e41f4b71Sopenharmony_ci``` 198e41f4b71Sopenharmony_ci 199e41f4b71Sopenharmony_ci 200e41f4b71Sopenharmony_ci```css 201e41f4b71Sopenharmony_ci/* xxx.css */ 202e41f4b71Sopenharmony_ci.container { 203e41f4b71Sopenharmony_ci flex-direction: column; 204e41f4b71Sopenharmony_ci align-items: center; 205e41f4b71Sopenharmony_ci background-color: #F1F3F5; 206e41f4b71Sopenharmony_ci} 207e41f4b71Sopenharmony_ci.input-item { 208e41f4b71Sopenharmony_ci margin-bottom: 80px; 209e41f4b71Sopenharmony_ci flex-direction: column; 210e41f4b71Sopenharmony_ci} 211e41f4b71Sopenharmony_ci.doc-row { 212e41f4b71Sopenharmony_ci justify-content: center; 213e41f4b71Sopenharmony_ci margin-left: 30px; 214e41f4b71Sopenharmony_ci margin-right: 30px; 215e41f4b71Sopenharmony_ci justify-content: space-around; 216e41f4b71Sopenharmony_ci} 217e41f4b71Sopenharmony_ci.input-text { 218e41f4b71Sopenharmony_ci height: 80px; 219e41f4b71Sopenharmony_ci line-height: 80px; 220e41f4b71Sopenharmony_ci padding-left: 30px; 221e41f4b71Sopenharmony_ci padding-right: 30px; 222e41f4b71Sopenharmony_ci margin-left: 30px; 223e41f4b71Sopenharmony_ci margin-right: 30px; 224e41f4b71Sopenharmony_ci margin-top:100px; 225e41f4b71Sopenharmony_ci border: 3px solid; 226e41f4b71Sopenharmony_ci border-color: #999999; 227e41f4b71Sopenharmony_ci font-size: 30px; 228e41f4b71Sopenharmony_ci background-color: #ffffff; 229e41f4b71Sopenharmony_ci font-weight: 400; 230e41f4b71Sopenharmony_ci} 231e41f4b71Sopenharmony_ci.select-button { 232e41f4b71Sopenharmony_ci width: 35%; 233e41f4b71Sopenharmony_ci text-align: center; 234e41f4b71Sopenharmony_ci height: 70px; 235e41f4b71Sopenharmony_ci padding-top: 10px; 236e41f4b71Sopenharmony_ci padding-bottom: 10px; 237e41f4b71Sopenharmony_ci margin-top: 30px; 238e41f4b71Sopenharmony_ci font-size: 30px; 239e41f4b71Sopenharmony_ci color: #ffffff; 240e41f4b71Sopenharmony_ci} 241e41f4b71Sopenharmony_ci.color-3 { 242e41f4b71Sopenharmony_ci background-color: #0598db;; 243e41f4b71Sopenharmony_ci} 244e41f4b71Sopenharmony_ci``` 245e41f4b71Sopenharmony_ci 246e41f4b71Sopenharmony_ci 247e41f4b71Sopenharmony_ci```js 248e41f4b71Sopenharmony_ci// xxx.js 249e41f4b71Sopenharmony_ciexport default { 250e41f4b71Sopenharmony_ci data: { 251e41f4b71Sopenharmony_ci myflex: '', 252e41f4b71Sopenharmony_ci myholder: 'Enter text.', 253e41f4b71Sopenharmony_ci myname: '', 254e41f4b71Sopenharmony_ci mystyle1: "#ffffff", 255e41f4b71Sopenharmony_ci mystyle2: "#ff0000", 256e41f4b71Sopenharmony_ci mytype: 'text', 257e41f4b71Sopenharmony_ci myvalue: '', 258e41f4b71Sopenharmony_ci }, 259e41f4b71Sopenharmony_ci onInit() { 260e41f4b71Sopenharmony_ci }, 261e41f4b71Sopenharmony_ci changetype3() { 262e41f4b71Sopenharmony_ci this.myflex = ''; 263e41f4b71Sopenharmony_ci this.myholder = 'Enter text.'; 264e41f4b71Sopenharmony_ci this.myname = ''; 265e41f4b71Sopenharmony_ci this.mystyle1 = "#ffffff"; 266e41f4b71Sopenharmony_ci this.mystyle2 = "#FF0000"; 267e41f4b71Sopenharmony_ci this.mytype = 'text'; 268e41f4b71Sopenharmony_ci this.myvalue = ''; 269e41f4b71Sopenharmony_ci }, 270e41f4b71Sopenharmony_ci changetype4() { 271e41f4b71Sopenharmony_ci this.myflex = ''; 272e41f4b71Sopenharmony_ci this.myholder = 'Enter a date.'; 273e41f4b71Sopenharmony_ci this.myname = ''; 274e41f4b71Sopenharmony_ci this.mystyle1 = "#ffffff"; 275e41f4b71Sopenharmony_ci this.mystyle2 = "#FF0000"; 276e41f4b71Sopenharmony_ci this.mytype = 'date'; 277e41f4b71Sopenharmony_ci this.myvalue = ''; 278e41f4b71Sopenharmony_ci }, 279e41f4b71Sopenharmony_ci} 280e41f4b71Sopenharmony_ci``` 281e41f4b71Sopenharmony_ci 282e41f4b71Sopenharmony_ci 283e41f4b71Sopenharmony_ci 284