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

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

5 6 7 8
>  **说明:** 
>
> 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

Y
Yao yuchi 已提交
9 10
## 子组件

Y
Yao yuchi 已提交
11

Y
Yao yuchi 已提交
12 13 14 15 16

##  接口

PatternLock(controller?: PatternLockController)

G
gmy 已提交
17
**参数:**
Y
Yao yuchi 已提交
18

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

## 属性
Y
Yao yuchi 已提交
24

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

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

Y
Yao yuchi 已提交
38 39
## 事件

G
gmy 已提交
40 41
除支持[通用事件](ts-universal-events-click.md)外,还支持以下事件:

H
geshi  
HelloCrease 已提交
42 43
| 名称                                       | 描述                                       |
| ---------------------------------------- | ---------------------------------------- |
Y
Yao yuchi 已提交
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
PatternLock组件的控制器,可以将此对象绑定至PatternLock组件,然后通过它进行状态重置。

### 导入对象

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

Y
Yao yuchi 已提交
56
### reset
Y
Yao yuchi 已提交
57

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

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

##  示例

H
geshi  
HelloCrease 已提交
64 65
```ts
// xxx.ets
Y
Yao yuchi 已提交
66 67
@Entry
@Component
Y
Yao yuchi 已提交
68
struct PatternLockExample {
Y
Yao yuchi 已提交
69 70 71
  @State passwords: Number[] = []
  @State message: string = 'please input password'
  private patternLockController: PatternLockController = new PatternLockController()
Y
Yao yuchi 已提交
72
  
Y
Yao yuchi 已提交
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>) => {
T
tianyu 已提交
83 84
          // 判断输出的密码格式
          if (input === null || input === undefined || input.length < 5) {
Y
Yao yuchi 已提交
85
            this.message = 'The password length needs to be greater than 5.'
T
tianyu 已提交
86
            // 重新触发该回调
Y
Yao yuchi 已提交
87
            return
Y
Yao yuchi 已提交
88
          }
T
tianyu 已提交
89
          // 判断密码长度是否大于0
Y
Yao yuchi 已提交
90
          if (this.passwords.length > 0) {
T
tianyu 已提交
91 92
              // 判断俩次输入的密码是否相等
            if (this.passwords.toString() === input.toString()) {
Y
Yao yuchi 已提交
93 94
              this.passwords = input
              this.message = 'Set password successfully: ' + this.passwords.toString()
Y
Yao yuchi 已提交
95
            } else {
Y
Yao yuchi 已提交
96
              this.message = 'Inconsistent passwords, please enter again.'
Y
Yao yuchi 已提交
97 98
            }
          } else {
Y
Yao yuchi 已提交
99 100
            this.passwords = input
            this.message = "Please enter again."
Y
Yao yuchi 已提交
101 102 103
          }
        })
      Button('reset button').margin(30).onClick(() => {
Y
Yao yuchi 已提交
104 105 106
        this.patternLockController.reset()
        this.passwords = []
        this.message = 'Please input password'
Y
Yao yuchi 已提交
107 108 109 110 111 112
      })
    }.width('100%').height('100%')
  }
}
```

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