1# PatternLock 2<!--Kit: ArkUI--> 3<!--Subsystem: ArkUI--> 4<!--Owner: @liyujie43--> 5<!--Designer: @weixin_52725220--> 6<!--Tester: @xiong0104--> 7<!--Adviser: @HelloCrease--> 8 9图案密码锁组件,以九宫格图案的方式输入密码,用于密码验证场景。手指在PatternLock组件区域按下时开始进入输入状态,手指离开屏幕时结束输入状态完成密码输入。 10 11> **说明:** 12> 13> 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 14 15## 子组件 16 17无 18 19## 接口 20 21PatternLock(controller?: PatternLockController) 22 23**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 24 25**系统能力:** SystemCapability.ArkUI.ArkUI.Full 26 27**参数:** 28 29| 参数名 | 类型 | 必填 | 说明 | 30| ---------- | ----------------------------------------------- | ---- | ------------------------------------------------------------ | 31| controller | [PatternLockController](#patternlockcontroller) | 否 | 设置PatternLock组件控制器,可用于控制组件状态重置。 | 32 33## 属性 34 35除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性: 36 37### sideLength 38 39sideLength(value: Length) 40 41设置组件的宽度和高度(宽高相同)。当设置为0或负数时,组件不显示。 42 43> **说明:** 44> 45> PatternLock组件设置了通用属性宽高比[aspectRatio](ts-universal-attributes-layout-constraints.md#aspectratio),且不等于1时(组件尺寸被设定为长方形),九宫格依然绘制为正方形(超出组件范围)。 46 47**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 48 49**系统能力:** SystemCapability.ArkUI.ArkUI.Full 50 51**参数:** 52 53| 参数名 | 类型 | 必填 | 说明 | 54| ------ | ---------------------------- | ---- | ------------------ | 55| value | [Length](ts-types.md#length) | 是 | 组件的宽度和高度。默认值:288vp | 56 57### circleRadius 58 59circleRadius(value: Length) 60 61设置宫格中圆点的半径。设置为0或负数时,取默认值。 62 63**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 64 65**系统能力:** SystemCapability.ArkUI.ArkUI.Full 66 67**参数:** 68 69| 参数名 | 类型 | 必填 | 说明 | 70| ------ | ---------------------------- | ---- | ---------------------------------- | 71| value | [Length](ts-types.md#length) | 是 |宫格中圆点的半径。<br/>默认值:6vp<br/>取值范围:(0, sideLength/11]。设置小于等于0的值时,按默认值处理;超过最大值时,按最大值处理。| 72 73### backgroundColor 74backgroundColor(value: ResourceColor) 75 76设置背景颜色。 77 78**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 79 80**系统能力:** SystemCapability.ArkUI.ArkUI.Full 81 82**参数:** 83 84| 参数名 | 类型 | 必填 | 说明 | 85| ------ | ------------------------------------------ | ---- | ---------------------------------------------------------- | 86| value | [ResourceColor](ts-types.md#resourcecolor) | 是 | 背景颜色。 | 87 88### regularColor 89 90regularColor(value: ResourceColor) 91 92设置宫格圆点在“未选中”状态的填充颜色。 93 94**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 95 96**系统能力:** SystemCapability.ArkUI.ArkUI.Full 97 98**参数:** 99 100| 参数名 | 类型 | 必填 | 说明 | 101| ------ | ------------------------------------------ | ---- | ---------------------------------------------------------- | 102| value | [ResourceColor](ts-types.md#resourcecolor) | 是 | 宫格圆点在“未选中”状态的填充颜色。<br/>默认值:'#ff182431' | 103 104### selectedColor 105 106selectedColor(value: ResourceColor) 107 108设置宫格圆点在“选中”状态的填充颜色。 109 110**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 111 112**系统能力:** SystemCapability.ArkUI.ArkUI.Full 113 114**参数:** 115 116| 参数名 | 类型 | 必填 | 说明 | 117| ------ | ------------------------------------------ | ---- | -------------------------------------------------------- | 118| value | [ResourceColor](ts-types.md#resourcecolor) | 是 | 宫格圆点在“选中”状态的填充颜色。<br/>默认值:'#ff182431' | 119 120### activeColor 121 122activeColor(value: ResourceColor) 123 124设置宫格圆点在“激活”状态的填充颜色,“激活”状态为手指经过圆点但还未选中的状态。 125 126**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 127 128**系统能力:** SystemCapability.ArkUI.ArkUI.Full 129 130**参数:** 131 132| 参数名 | 类型 | 必填 | 说明 | 133| ------ | ------------------------------------------ | ---- | -------------------------------------------------------- | 134| value | [ResourceColor](ts-types.md#resourcecolor) | 是 | 宫格圆点在“激活”状态的填充颜色。<br/>默认值:'#ff182431' | 135 136### pathColor 137 138pathColor(value: ResourceColor) 139 140设置连线的颜色。 141 142**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 143 144**系统能力:** SystemCapability.ArkUI.ArkUI.Full 145 146**参数:** 147 148| 参数名 | 类型 | 必填 | 说明 | 149| ------ | ------------------------------------------ | ---- | ------------------------------------ | 150| value | [ResourceColor](ts-types.md#resourcecolor) | 是 | 连线的颜色。<br/>默认值:'#33182431' | 151 152### pathStrokeWidth 153 154pathStrokeWidth(value: number | string) 155 156设置连线的宽度。设置为0或负数时连线不显示。 157 158**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 159 160**系统能力:** SystemCapability.ArkUI.ArkUI.Full 161 162**参数:** 163 164| 参数名 | 类型 | 必填 | 说明 | 165| ------ | -------------------------- | ---- | ----------------------------- | 166| value | number \| string | 是 | 连线的宽度。<br/>默认值:12vp<br/>取值范围:(0, sideLength/3],超过最大值按最大值处理。 | 167 168### autoReset 169 170autoReset(value: boolean) 171 172设置在完成密码输入后再次在组件区域按下时是否重置组件状态。 173 174**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 175 176**系统能力:** SystemCapability.ArkUI.ArkUI.Full 177 178**参数:** 179 180| 参数名 | 类型 | 必填 | 说明 | 181| ------ | ------- | ---- | ------------------------------------------------------------ | 182| value | boolean | 是 | 在完成密码输入后再次在组件区域按下时是否重置组件状态。<br/>为true时,完成密码输入后再次在组件区域按下时会重置组件状态(即清除之前输入的密码);为false时,不会重置组件状态。<br/>默认值:true | 183 184### activateCircleStyle<sup>12+</sup> 185 186activateCircleStyle(options: Optional\<CircleStyleOptions\>) 187 188设置宫格圆点在“激活”状态下的背景圆环样式。 189 190**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 191 192**系统能力:** SystemCapability.ArkUI.ArkUI.Full 193 194**参数:** 195 196| 参数名 | 类型 | 必填 | 说明 | 197| ------ | ------- | ---- | ------------------------------------------------------------ | 198| options | Optional\<[CircleStyleOptions](#circlestyleoptions12对象说明)\> | 是 | 宫格圆点在“激活”状态的背景圆环样式。| 199 200### skipUnselectedPoint<sup>15+</sup> 201 202skipUnselectedPoint(skipped: boolean) 203 204设置未选中的宫格圆点在密码路径经过时是否自动选中。 205 206**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 207 208**系统能力:** SystemCapability.ArkUI.ArkUI.Full 209 210**参数:** 211 212| 参数名 | 类型 | 必填 | 说明 | 213| ------ | ------- | ---- | ------------------------------------------------------------ | 214| skipped | boolean | 是 | 未选中的宫格圆点在密码路径经过时是否自动选中。<br/>默认值:false,自动选中密码路径经过的宫格圆点。| 215 216## 事件 217 218除支持[通用事件](ts-component-general-events.md)外,还支持以下事件: 219 220### onPatternComplete 221 222onPatternComplete(callback: (input: Array\<number\>) => void) 223 224密码输入结束时触发该回调。 225 226**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 227 228**系统能力:** SystemCapability.ArkUI.ArkUI.Full 229 230**参数:** 231 232| 参数名 | 类型 | 必填 | 说明 | 233| ------ | --------------- | ---- | ------------------------------------------------------------ | 234| input | Array\<number\> | 是 | 与选中宫格圆点顺序一致的数字数组,每个数字表示选中宫格圆点的索引值(第一行圆点从左往右依次为0、1、2,第二行圆点依次为3、4、5,第三行圆点依次为6、7、8)。 | 235 236### onDotConnect<sup>11+</sup> 237 238onDotConnect(callback: [Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\<number\>) 239 240密码输入选中宫格圆点时触发该回调。 241 242回调参数为选中宫格圆点顺序的数字,数字为选中宫格圆点的索引值(第一行圆点从左往右依次为0、1、2,第二行圆点依次为3、4、5,第三行圆点依次为6、7、8)。 243 244**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 245 246**系统能力:** SystemCapability.ArkUI.ArkUI.Full 247 248**参数:** 249 250| 参数名 | 类型 | 必填 | 说明 | 251| ------ | --------------- | ---- | ------------------------------------------------------------ | 252| callback | [Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\<number\> | 是 | 密码输入选中宫格圆点时触发该回调。 | 253 254## CircleStyleOptions<sup>12+</sup>对象说明 255 256圆环样式的参数说明。 257 258**系统能力:** SystemCapability.ArkUI.ArkUI.Full 259 260 261| 名称 | 类型 | 只读 | 可选 | 说明 | 262| ------------- | ------- | ---- | -------- | -------- | 263| color | [ResourceColor](ts-types.md#resourcecolor) | 否 | 是 | 背景圆环颜色。 <br/>默认值:与pathColor值相同。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 264| radius | [LengthMetrics](../js-apis-arkui-graphics.md#lengthmetrics12) | 否 | 是 | 背景圆环的半径。<br/>默认值:circleRadius的11/6。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 265| enableWaveEffect | boolean | 否 | 是 | 波浪效果开关。<br/>默认值:true,表示波浪效果开关打开,显示波浪效果。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 266| enableForeground<sup>15+</sup> | boolean | 否 | 是 | 背景圆环是否在前景显示。<br/>默认值:false,背景圆环不在前景显示。 <br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 | 267 268## PatternLockController 269 270PatternLock组件的控制器,用于重置组件状态。 271 272### 导入对象 273 274```typescript 275let patternLockController: PatternLockController = new PatternLockController() 276``` 277 278### constructor 279 280constructor() 281 282PatternLockController的构造函数。 283 284**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 285 286**系统能力:** SystemCapability.ArkUI.ArkUI.Full 287 288### reset 289 290reset() 291 292重置组件状态。 293 294**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 295 296**系统能力:** SystemCapability.ArkUI.ArkUI.Full 297 298### setChallengeResult<sup>11+</sup> 299 300setChallengeResult(result: PatternLockChallengeResult): void 301 302设置图案密码的正确或错误状态。 303 304**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 305 306**系统能力:** SystemCapability.ArkUI.ArkUI.Full 307 308**参数:** 309 310| 参数名 | 类型 | 必填 | 说明 | 311| ------ | ------------------------------------------------------------ | ---- | -------------- | 312| result | [PatternLockChallengeResult](#patternlockchallengeresult11枚举说明) | 是 | 图案密码状态。 | 313 314## PatternLockChallengeResult<sup>11+</sup>枚举说明 315 316图案密码状态。 317 318**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 319 320**系统能力:** SystemCapability.ArkUI.ArkUI.Full 321 322| 名称 | 值 | 说明 | 323| ------- | ----- | -------------- | 324| CORRECT | 1 | 图案密码正确。 | 325| WRONG | 2 | 图案密码错误。 | 326 327## 示例 328 329### 示例1(创建图案密码锁) 330 331该示例展示了PatternLock组件的基本使用方法。 332 333```ts 334// xxx.ets 335@Entry 336@Component 337struct PatternLockExample { 338 @State passwords: number[] = []; 339 @State message: string = 'please input password!'; 340 private patternLockController: PatternLockController = new PatternLockController(); 341 342 build() { 343 Column() { 344 Text(this.message).textAlign(TextAlign.Center).margin(20).fontSize(20) 345 PatternLock(this.patternLockController) 346 .sideLength(200) 347 .circleRadius(9) 348 .pathStrokeWidth(5) 349 .activeColor('#707070') 350 .selectedColor('#707070') 351 .pathColor('#707070') 352 .backgroundColor('#F5F5F5') 353 .autoReset(true) 354 .onDotConnect((index: number) => { 355 console.info("onDotConnect index: " + index); 356 }) 357 }.width('100%').height('100%') 358 } 359} 360``` 361 362 363 364### 示例2(判断密码是否正确) 365 366该示例通过[sideLength](#sidelength)属性设置九宫格的大小、[circleRadius](#circleradius)等属性设置宫格圆点样式、[onPatternComplete](#onpatterncomplete)属性设置密码输入时的回调。 367 368当用户密码输入完成后,按输入的密码不同,给予不同的回应:输入的密码长度小于5时,提示重新输入;第一次输入完成后,提示第二次输入密码;第二次输入完成后,判断两次输入的密码是否相同,相同则提示密码设置成功,否则提示重新输入。 369 370通过'Reset PatternLock'按钮,用户可以重置密码锁。 371 372```ts 373// xxx.ets 374import { LengthUnit } from '@kit.ArkUI'; 375 376@Entry 377@Component 378struct PatternLockExample { 379 @State passwords: number[] = []; 380 @State message: string = 'please input password!'; 381 private patternLockController: PatternLockController = new PatternLockController(); 382 383 build() { 384 Column() { 385 Text(this.message).textAlign(TextAlign.Center).margin(20).fontSize(20) 386 PatternLock(this.patternLockController) 387 .sideLength(200) 388 .circleRadius(9) 389 .pathStrokeWidth(5) 390 .activeColor('#707070') 391 .selectedColor('#707070') 392 .pathColor('#707070') 393 .backgroundColor('#F5F5F5') 394 .autoReset(true) 395 .activateCircleStyle({ 396 color: '#707070', 397 radius: { value: 16, unit: LengthUnit.VP }, 398 enableWaveEffect: true 399 }) 400 .onDotConnect((index: number) => { 401 console.info("onDotConnect index: " + index); 402 }) 403 .onPatternComplete((input: Array<number>) => { 404 // 输入的密码长度小于5时,提示重新输入 405 if (input.length < 5) { 406 this.message = 'The password length needs to be greater than 5, please enter again.'; 407 return; 408 } 409 // 判断密码长度是否大于0 410 if (this.passwords.length > 0) { 411 // 判断两次输入的密码是否相同,相同则提示密码设置成功,否则提示重新输入 412 if (this.passwords.toString() === input.toString()) { 413 this.passwords = input; 414 this.message = 'Set password successfully: ' + this.passwords.toString(); 415 this.patternLockController.setChallengeResult(PatternLockChallengeResult.CORRECT); 416 } else { 417 this.message = 'Inconsistent passwords, please enter again.'; 418 this.patternLockController.setChallengeResult(PatternLockChallengeResult.WRONG); 419 } 420 } else { 421 // 提示第二次输入密码 422 this.passwords = input; 423 this.message = "Please enter again."; 424 } 425 }) 426 Button('Reset PatternLock').margin(30).onClick(() => { 427 // 重置密码锁 428 this.patternLockController.reset(); 429 this.passwords = []; 430 this.message = 'Please input password'; 431 }) 432 }.width('100%').height('100%') 433 } 434} 435``` 436 437 438