ts-basic-components-patternlock.md 5.5 KB
Newer Older
Y
Yao yuchi 已提交
1 2 3
# PatternLock

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Y
Yao yuchi 已提交
4

Y
Yao yuchi 已提交
5
图案密码锁组件,以宫格图案的方式输入密码,用于密码验证。手指触碰图案密码锁时开始进入输入状态,手指离开屏幕时结束输入状态并向应用返回输入的密码。
Y
Yao yuchi 已提交
6

Y
Yao yuchi 已提交
7 8 9
## 权限列表


Y
Yao yuchi 已提交
10

Y
Yao yuchi 已提交
11 12
## 子组件

Y
Yao yuchi 已提交
13

Y
Yao yuchi 已提交
14 15 16 17 18 19 20

##  接口

PatternLock(controller?: PatternLockController)

- 参数

Y
Yao yuchi 已提交
21 22 23 24 25
  | 参数名     | 参数类型                                        | 必填 | 默认值 | 参数描述                                     |
  | ---------- | ----------------------------------------------- | ---- | ------ | -------------------------------------------- |
  | controller | [PatternLockController](#PatternLockController) | 否   | null   | 给组件绑定一个控制器,用来控制组件状态重置。 |

## 属性
Y
Yao yuchi 已提交
26

Y
Yao yuchi 已提交
27
不支持`backgroundColor`以外的通用属性设置。
Y
Yao yuchi 已提交
28

Y
Yao yuchi 已提交
29 30 31 32 33 34 35 36 37 38
| 名称            | 参数类型                                                     | 默认值      | 描述                                                         |
| --------------- | ------------------------------------------------------------ | ----------- | ------------------------------------------------------------ |
| sideLength      | Length                                                       | 300vp       | 设置组件的宽度和高度(相同值)。最小可以设置为0。            |
| circleRadius    | Length                                                       | 14vp        | 设置宫格圆点的半径。                                         |
| regularColor    | [ResourceColor](../../ui/ts-types.md#resourcecolor%E7%B1%BB%E5%9E%8B8) | Color.Black | 设置宫格圆点在“未选中”状态的填充颜色。                       |
| selectedColor   | [ResourceColor](../../ui/ts-types.md#resourcecolor%E7%B1%BB%E5%9E%8B8) | Color.Black | 设置宫格圆点在“选中”状态的填充颜色。                         |
| activeColor     | [ResourceColor](../../ui/ts-types.md#resourcecolor%E7%B1%BB%E5%9E%8B8) | Color.Black | 设置宫格圆点在“激活”状态的填充颜色。                         |
| pathColor       | [ResourceColor](../../ui/ts-types.md#resourcecolor%E7%B1%BB%E5%9E%8B8) | Color.Blue  | 设置连线的颜色。                                             |
| pathStrokeWidth | Length                                                       | 34vp        | 设置连线的宽度。最小可以设置为0。                            |
| autoReset       | boolean                                                      | true        | 设置是否支持用户在完成输入后再次触屏重置组件状态。如果设置为true,用户可以通过触摸图案密码锁重置组件状态(清除之前的输入效果);如果设置为false,用户手指离开屏幕完成输入后,再次触摸图案密码锁(包括圆点)不能改变之前的输入状态。 |
Y
Yao yuchi 已提交
39

Y
Yao yuchi 已提交
40 41 42 43 44 45
## 事件

| 名称                                                         | 功能描述                                                     |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| onPatternComplete(callback: (input: Array\<number\>) => void) | 密码输入结束时被调用的回调函数。<br />input: 与选中宫格圆点顺序一致的数字数组,数字为选中宫格的索引(0到8)。 |

Y
Yao yuchi 已提交
46
## PatternLockController
Y
Yao yuchi 已提交
47

Y
Yao yuchi 已提交
48 49 50 51 52 53 54 55 56 57 58
PatternLock组件的控制器,可以将此对象绑定至PatternLock组件,然后通过它进行状态重置。

### 导入对象

```typescript
patternLockController: PatternLockController = new PatternLockController()
```

### patternLockController.reset

reset():void
Y
Yao yuchi 已提交
59

Y
Yao yuchi 已提交
60
重置组件状态。
Y
Yao yuchi 已提交
61 62 63 64 65 66

##  示例

```typescript
@Entry
@Component
Y
Yao yuchi 已提交
67
struct PatternLockExample {
Y
Yao yuchi 已提交
68 69 70
  @State passwords: Number[] = []
  @State message: string = 'please input password'
  private patternLockController: PatternLockController = new PatternLockController()
Y
Yao yuchi 已提交
71
  
Y
Yao yuchi 已提交
72 73 74 75 76 77 78 79 80 81 82
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Text(this.message).textAlign(TextAlign.Center)
      PatternLock(this.patternLockController)
        .sideLength(150)
        .circleRadius(7)
        .pathStrokeWidth(17)
        .backgroundColor(Color.White)
        .autoReset(true)
        .onPatternComplete((input: Array<number>) => {
          if (input == null || input == undefined || input.length < 5) {
Y
Yao yuchi 已提交
83 84
            this.message = 'The password length needs to be greater than 5.'
            return
Y
Yao yuchi 已提交
85 86 87
          }
          if (this.passwords.length > 0) {
            if (this.passwords.toString() == input.toString()) {
Y
Yao yuchi 已提交
88 89
              this.passwords = input
              this.message = 'Set password successfully: ' + this.passwords.toString()
Y
Yao yuchi 已提交
90
            } else {
Y
Yao yuchi 已提交
91
              this.message = 'Inconsistent passwords, please enter again.'
Y
Yao yuchi 已提交
92 93
            }
          } else {
Y
Yao yuchi 已提交
94 95
            this.passwords = input
            this.message = "Please enter again."
Y
Yao yuchi 已提交
96 97 98
          }
        })
      Button('reset button').margin(30).onClick(() => {
Y
Yao yuchi 已提交
99 100 101
        this.patternLockController.reset()
        this.passwords = []
        this.message = 'Please input password'
Y
Yao yuchi 已提交
102 103 104 105 106 107
      })
    }.width('100%').height('100%')
  }
}
```

Y
Yao yuchi 已提交
108
![patternlock](figures/patternlock.gif)
Y
Yao yuchi 已提交
109