# HKeyBoard
**Repository Path**: jiao-shichun/HKeyBoard
## Basic Information
- **Project Name**: HKeyBoard
- **Description**: 仿支付宝支付,京东支付自定义键盘
- **Primary Language**: Kotlin
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-04
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 自定义键盘(仿京东和支付宝键盘)
## 效果图
|仿京东支付键盘 |仿支付宝支付键盘
|---|---|
|
|
## 使用方式
+ 京东支付键盘
```
override fun onCreate(savedInstanceState: Bundle?) {
···
boardHelper = HKeyBoardHelper(this)
.bindEditText(editText)
.updateKeyBoardStyle(R.xml.number_keyboard)
}
```
+ 支付宝支付键盘
```
override fun onCreate(savedInstanceState: Bundle?) {
···
boardHelper = HKeyBoardHelper(this)
.bindEditText(editText)
.updateKeyBoardStyle(R.xml.abc_keyboard)
.setOnKeyClickListener(onKeyClickListener)
}
/**
* 设置特殊按键监听
*/
private val onKeyClickListener: (code: Int, keyData: HKeyData) -> Boolean = { code, keyData ->
when (code) {
HKeyBoardView.ALI_CODE_DONE -> {
Toast.makeText(this, "完成按钮", Toast.LENGTH_SHORT).show()
true
}
HKeyBoardView.ALI_CODE_ABC_KEYBOARD_NUMBER -> {//切换键盘为 字符1类型
boardHelper.updateKeyBoardStyle(R.xml.abc_keyboard_symbol1)
true
}
HKeyBoardView.ALI_CODE_SYMBOL1_KEYBOARD_ABC -> { //切换键盘为 字母键盘
boardHelper.updateKeyBoardStyle(R.xml.abc_keyboard)
true
}
HKeyBoardView.ALI_CODE_SYMBOL1_KEYBOARD_NUMBER -> {// 切换键盘为 字符2类型
boardHelper.updateKeyBoardStyle(R.xml.abc_keyboard_symbol2)
true
}
HKeyBoardView.ALI_CODE_SYMBOL2_KEYBOARD_SYMBOL -> {//切换键盘为 字符1类型
boardHelper.updateKeyBoardStyle(R.xml.abc_keyboard_symbol1)
true
}
else -> false
}
}
```
**setOnKeyClickListener(listener: (code: Int, keyData: HKeyData) -> Boolean)方法,拦截键的点击事件,如果返回true,则会消耗事件,不会执行默认的行为**
## 自定义键盘
修改键盘样式类型,需重写键盘的xml文件,可以将number_keyboard.xml或abc_keyboard.xml复制到自己项目中的src/main/res/xml目录下重命名后进行修改。
HKeyBoardHelper.updateKeyBoardStyle(R.xml.xxx) 替换为自己项目中的xml文件即可
xml文件一共有三层如下
```
```
HKeyboard表示键盘的属性,Row表示每行键的属性,Key表示每个键的属性。
HKeyboard和Key相同的属性,以Key的属性为准
HKeyboard所有属性如下
|属性名 |值类型 | 含义
|---|---|----
|ratioWH| Float| 键盘宽高比
|paddingLeft|dimen资源|左侧Padding
|paddingTop|dimen资源|上侧Padding
|paddingRight|dimen资源|右侧Padding
|paddingBottom|dimen资源|下侧Padding
|horizontalSpacing|dimen资源|每列键的间距
|verticalSpacing|dimen资源|每行键的间距
|backgroundColor|color资源|键盘的背景颜色
|keyBackgroundColor|color资源|每个键的背景颜色
|keyTextColor|color资源|每个键文字的颜色
|keyTextSize|dimen资源|每个键文字的尺寸大小
|keyBorderRadius|dimen资源|每个键圆角尺寸大小
Row所有属性如下
|属性名 |值类型 | 含义
|---|---|----
|leftSpaceWeight| Float| 该行键左侧间距的权重
|rightSpaceWeight| Float| 该行键右侧间距的权重
Key所有属性如下
|属性名 |值类型 | 含义
|---|---|----
|code| Int| 键的唯一标示
|value| String| 该键对应的文字
|drawableRes| drawable资源| 该键的图片资源(只有value是空时,才会显示图片)
|weight| Float| 该键宽度的权重
|keyBackgroundColor|color资源|该键的背景颜色
|keyTextColor|color资源|该键文字的颜色
|keyTextSize|dimen资源|该键文字的尺寸大小
|keyBorderRadius|dimen资源|该键圆角尺寸大小
**自定义键盘注意点**
1. code不能重复,下面这三个code值不能随意改变
~~~
const val CODE_DELETE = -5 //删除键
const val CODE_BLACK = 38 //空格键
const val CODE_SHIFT = -1 //shift上档键 切换大小写
~~~
2. 键的背景颜色、键的文字颜色、键的展示图片如果需要点击效果可以使用selector资源文件,格式如下
```
```
3. 只有shift有选中状态,shift键的 图片/背景/文字颜色可以通过selector资源文件的 android:state_selected="true" 来设置选中效果
```
```
## 不足
+ 自定义的xml文件,引用资源时不会自动联想,重命名资源文件时,xml文件中的资源需要手打修改。