Android中自定义键盘的实现

前言

由于项目需求, 需要自定义一个数字键盘用于输入数字, 同时要实现简单的计算器功能,即加减乘除。下面,我以自定义一个计算器键盘来说明实现一个自定义键盘的过程

定义布局

自定义键盘的第一步,就是确定布局。首先在资源文件夹下建一个xml目录,在目录中新建一个键盘布局文件,比如 keyboard.xml。先给上我的布局代码,后面具体分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyHeight="9%p"
android:keyWidth="25%p">
<Row>
<Key
android:codes="-1"
android:keyLabel="C" />
<Key
android:codes="42"
android:keyLabel="×" />
<Key
android:codes="47"
android:keyLabel="÷" />
<Key
android:codes="-2"
android:keyIcon="@mipmap/delete" />
</Row>
<Row>
<Key
android:codes="55"
android:keyLabel="7" />
<Key
android:codes="56"
android:keyLabel="8" />
<Key
android:codes="57"
android:keyLabel="9" />
<Key
android:codes="45"
android:keyLabel="-" />
</Row>
<Row>
<Key
android:codes="52"
android:keyLabel="4" />
<Key
android:codes="53"
android:keyLabel="5" />
<Key
android:codes="54"
android:keyLabel="6" />
<Key
android:codes="43"
android:keyLabel="+" />
</Row>
<Row>
<Key
android:codes="49"
android:keyLabel="1" />
<Key
android:codes="50"
android:keyLabel="2" />
<Key
android:codes="51"
android:keyLabel="3" />
<Key
android:codes="-3"
android:keyIcon="@mipmap/cancel" />
</Row>
<Row>
<Key
android:codes="-5"
android:keyLabel=" " />
<Key
android:codes="48"
android:keyLabel="0" />
<Key
android:codes="46"
android:keyLabel="." />
<Key
android:codes="-4"
android:keyIcon="@mipmap/confirm" />
</Row>
</Keyboard>

元素代表键盘布局的一行, android:keyHeight 和 android:keyWidth 分别表示键盘上每个键的高度和宽度,%p 表示占键盘总宽度的或者总高度的百分之几,每个元素都有这两个属性,由于我的需求中每个键盘的按键大小都是相同的,所以统一设置在 元素里。 元素表示键盘的按键,其中重点关注以下几个属性

  • android:codes 该属性是键盘的唯一标识,有点类似身份证的效果,一般我们把数字、英文字符、特殊符号的 asiic 码作为键盘的 code, 这样可以方便将 asiic 码直接作为内容输入,在后面我会提到具体用法。当然有人可能会问,万一我要输入的东西没有asiic码怎么办,刚刚只是说了一般情况,这个 codes 值也是可以自定义的,只要是键盘里唯一的就好了。
  • android:keyLabel 该属性表示键盘上显示的文本内容
  • android:keyIcon 有键盘上显示的不一定是文字,有可能是图片,该属性就是用来显示图片的。

其他的属性可以参见 Google官方文档