LatinIME是Android AOSP中的一个开源输入法项目,利用该输入法可以完成多个国外语言的切换和输入,非常方便。本文就是实现在这个项目的基础上添加一个自定义按键,完成自己需要的功能。
准备三个图片
其实这三个图片就是从
LatinIME\java\res\drawable-hdpi
这个目录里拿出来的,我没有设计自己的icon,所以直接拿原先存在的icon来作为测试。
然后就把这三个图片放进drawable-hdpi这个目录中。
从这三个文件中
LatinIME\java\res\values\keyboard-icons-holo.xml
LatinIME\java\res\values\keyboard-icons-lxx-dark.xml
LatinIME\java\res\values\keyboard-icons-lxx-light.xml
分别添加
- @drawable/sym_keyboard_shift_holo_dark
- @drawable/sym_keyboard_shift_lxx_dark
- @drawable/sym_keyboard_shift_lxx_light
添加自定义的映射
LatinIME\java\res\values\attrs.xml
<attr name="iconTestKey" format="reference" />
LatinIME\java\src\com\android\inputmethod\keyboard\internal\KeyboardIconsSet.java
public static final String NAME_TEST_KEY = "test_key";
NAME_TEST_KEY, R.styleable.Keyboard_iconTestKey,
LatinIME\common\src\com\android\inputmethod\latin\common\Constants.java
public static final int CODE_TEST = -16;
case CODE_TEST: return "test";
LatinIME\java\src\com\android\inputmethod\keyboard\internal\KeyboardCodesSet.java
"key_test",
Constants.CODE_TEST,
添加按钮属性
LatinIME\java\res\xml\key_styles_common.xml
<key-style
latin:styleName="toTestKeyStyle"
latin:keySpec="!icon/test_key|!code/key_test"
latin:keyActionFlags="isRepeatable|noKeyPreview"
latin:backgroundType="functional"/>
添加自定义按钮的点击事件
LatinIME\java\src\com\android\inputmethod\keyboard\internal\KeyboardState.java
if (code != Constants.CODE_TEST) {
Log.v("Test-lanjiabin","KeyboardState->onPressKey()->CODE_TEST");
}
在键盘中使用自定义按钮
把26键盘的最后一行的第一个按键设置为自定义按钮。我这里只是把原先的按键换成自己的按键而已。
LatinIME\java\res\xml\row_qwerty4.xml
<Key
latin:keyStyle="toTestKeyStyle"
latin:keyWidth="15%p" />
编译并push按照自己的方法,在android源码中编译并push到自己手机。
效果图,其中圈起来的,就是自定义按钮,因为用的是上面大小写切换的icon,所以这两个长得一样。但是功能不一样。
点一下这个按钮,然后就是测试日志:
对比点击事件的代码:
没错,到这里,我们自定义的按钮还有点击事件,成功了。
LatinIME\java\src\com\android\inputmethod\latin\inputlogic\InputLogic.java
case Constants.CODE_TEST:
Log.v("Test_lanjiabin","InputLogic->handleFunctionalEvent->CODE_TEST");
break;