使用SDK
初始化
// 初始化安全键盘配置
KeyboardConfigApi.init(context);
// 设置键位显示与键值映射数据从云端拉取
KeyboardConfigApi.getInstance().setKeyboardDataConfigMode(KeyboardConfigMode.CONFIG_MODE_ONLINE);
// 设置键位显示与键值映射关系数据网络拉取接口的实现
KeyboardConfigApi.getInstance().setFetchRemoteConfigDataNetHelper(new DefaultGetKeyPositionNetHelper());
// 设置为自定义键位布局
KeyboardConfigApi.getInstance().customKeyboardLayoutProvider(new DefaultKeyboardLayoutProvider());
// 设置键位数据更新频率 300000 -> 5分钟 默认10分钟
KeyboardConfigApi.getInstance().setUpdateKeyPositionFrequency(300000);
// customKeyPositionProvider.doShuffle(SubKeyboard.SUB_KEYBOARD_LETTER, true);
// CustomKeyPositionProvider customKeyPositionProvider = new CustomKeyPositionProvider();
// KeyboardConfigApi.getInstance().customKeyPositionProvider(customKeyPositionProvider);
// KeyboardConfigApi.getInstance().setKeyboardDataConfigMode(KeyboardConfigMode.CONFIG_MODE_CUSTOM);
安全键盘控件使用方式
- 手动创建键盘View的使用方式
XML创建View:
<com.tencent.tmf.keyboard.component.keyboard.CustomKeyboard
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#454A4D"
android:visibility="visible" />
mSafeKeyboard = findViewById(R.id.keyboard);
代码创建View:
CustomKeyboard mSafeKeyboard = new CustomKeyboard(context);
使用:
CustomKeyboardWrapper wrapper = new CustomKeyboardWrapper(this, mSafeKeyboard);
// 属性设置
setProperty(wrapper);
/**
* 注意:
* 此方法只需调用一次 每次调用都会向tmf 安全键盘服务请求 键盘映射数据 与 解密上下文
*/
wrapper.wrap(new IRelayoutKeyboardHelper() {
@Override
public void doRelayout() {
// 键盘重新布局了,输入框内的旧数据需要清除掉,让用户重新完整输入一遍
}
});
/**
* 注意:
* 解密上下文的获取需要在安全键盘绘制完成之后
* 如果在 wrapper.wrap 方法之后立即获取则有可能为null
*/
byte[] context = wrapper.getContext();
private void setProperty(CustomKeyboardWrapper wrapper) {
// 设置会话ID 为当前页面
wrapper.setSessionId(this.hashCode());
// 隐藏键盘收起图标
wrapper.hideCollapseIcon();
//设置键盘品牌名称
wrapper.setBrandName("TMF安全键盘");
//设置键盘商标
wrapper.setBrandIcon(getResources().getDrawable(R.drawable.brand_icon));
//设置键盘预览
wrapper.setKeyboardPreview(new DefaultKeyItemPreview(this, mSafeKeyboard));
/**
* 键盘的输入类型
* 默认类型 : 字母 数字 字符 可以切换
* 数字键盘 : 仅包含数字 不可切换
* 身份证键盘: 仅包含数字 + X 不可切换
*/
wrapper.setInputType(KeyboardInputType.NONE);
//设置字母键盘 功能键背景色
wrapper.setFnKeyFillStyle(SubKeyboard.SUB_KEYBOARD_LETTER,
getResources().getColor(R.color.default_fn_key_normal_color),
getResources().getColor(R.color.default_fn_key_press_color));
//设置字母键盘 回车键背景色
wrapper.setEnterKeyFillStyle(SubKeyboard.SUB_KEYBOARD_LETTER,
getResources().getColor(R.color.default_enter_key_normal_color),
getResources().getColor(R.color.default_enter_key_press_color));
//设置字母键盘 内容键背景色
wrapper.setContentKeyFillStyle(SubKeyboard.SUB_KEYBOARD_LETTER,
getResources().getColor(R.color.default_content_key_normal_color),
getResources().getColor(R.color.default_content_key_press_color));
//设置数字键盘 功能键背景色
wrapper.setFnKeyFillStyle(SubKeyboard.SUB_KEYBOARD_NUMBER,
getResources().getColor(R.color.default_fn_key_normal_color),
getResources().getColor(R.color.default_fn_key_press_color));
//设置数字键盘 回车键背景色
wrapper.setEnterKeyFillStyle(SubKeyboard.SUB_KEYBOARD_NUMBER,
getResources().getColor(R.color.default_enter_key_normal_color),
getResources().getColor(R.color.default_enter_key_press_color));
//设置数字键盘 内容键背景色
wrapper.setContentKeyFillStyle(SubKeyboard.SUB_KEYBOARD_NUMBER,
getResources().getColor(R.color.default_content_key_normal_color),
getResources().getColor(R.color.default_content_key_press_color));
//设置字符键盘 功能键背景色
wrapper.setFnKeyFillStyle(SubKeyboard.SUB_KEYBOARD_SYMBOL,
getResources().getColor(R.color.default_fn_key_normal_color),
getResources().getColor(R.color.default_fn_key_press_color));
//设置字符键盘 回车键背景色
wrapper.setEnterKeyFillStyle(SubKeyboard.SUB_KEYBOARD_SYMBOL,
getResources().getColor(R.color.default_enter_key_normal_color),
getResources().getColor(R.color.default_enter_key_press_color));
//设置字符键盘 内容键背景色
wrapper.setContentKeyFillStyle(SubKeyboard.SUB_KEYBOARD_SYMBOL,
getResources().getColor(R.color.default_content_key_normal_color),
getResources().getColor(R.color.default_content_key_press_color));
// 按键监听
wrapper.setKeyboardActionListener(new CustomKeyboardView.SafeKeyboardActionListener() {
@Override
public void onKey(int primaryKeyCode, MagicText magicText) {
ToastUtil.showToast(CustomKeyboardActivity.this, magicText.getText().toString());
}
});
}
更多键盘UI相关API请参考键盘UI相关API
- 自动创建键盘View的使用方式
/**
* 触发浮层键盘输入
* @param activity 当前界面对象实例
* @param editText 输入控件
* @param completeListener 输入完成回调接口
*/
KeyboardWrapperApi.doInputWithPopupKeyboard(KeyboardDemoActivity.this, mSafeEditText, new IInputCompleteListener() {
@Override
public void onComplete(byte[] context, String msg) {
doCommit(context, msg);
}
});
输入组件 PasswordEditText 接入
PasswordEditText为可选组件,也可以使用系统EditText代替。 直接 new 或者布局中添加如下代码:
<com.tencent.tmf.keyboard.component.text.PasswordEditText
android:id="@+id/pwd_view"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="100dp"
android:background="@null"
android:paddingLeft="20dp"
android:paddingRight="20dp"
app:borderCorner="5dp"
app:drawBorder="true"
app:textGap="0dp" />
控件提供了丰富的自定义属性配置:
<declare-styleable name="PasswordEditText">
<!-- 文字输入长度 -->
<attr name="textLength" format="integer" />
<!-- 有无边框 -->
<attr name="drawBorder" format="boolean" />
<!-- 边框宽度 -->
<attr name="border_width" />
<!-- 边框圆角 -->
<attr name="borderCorner" />
<!-- 边框颜色 -->
<attr name="borderColor" />
<!-- 边框填充颜色 -->
<attr name="borderFillColor" />
<!-- 焦点边框颜色 -->
<attr name="focusBorderColor" />
<!-- 焦点填充颜色 -->
<attr name="focusBorderFillColor" />
<!-- 文字的宽度 -->
<attr name="textWidth" format="integer|dimension" />
<!-- 文字的间隔 -->
<attr name="textGap" format="integer|dimension" />
<!-- 文字的颜色 -->
<attr name="normalStateTextColor" />
<!-- 是否隐藏明文 -->
<attr name="hidePlainText" format="boolean" />
<!-- 圆点的半径 -->
<attr name="dotRadius" format="float|dimension" />
<!-- 圆点的颜色 -->
<attr name="dotColor" format="color" />
<!-- 文字的大小 -->
<attr name="text_size" />
</declare-styleable>
PasswordEditText
也提供属性代码设置,这里不再赘述。
输入控件与系统键盘、安全键盘的联动使用
mSafeEditText.setInputListener(new PasswordEditText.InputHandler() {
@Override
public void showKeyboard() {
// 使用安全键盘
KeyboardWrapperApi.doInputWithPopupKeyboard(KeyboardDemoActivity.this, mSafeEditText, new IInputCompleteListener() {
@Override
public void onComplete(byte[] context, String msg) {
doCommit(context, msg);
}
});
// 使用系统键盘
KeyboardHelper.showKeyboard(mSafeEditText);
}
});