文章目录

  • 前言
  • 一、引进图片按钮
  • 二、添加映射
  • 三、attrs.xml
  • 四、KeyboardIconsSet.java
  • 五、Constants.java
  • 六、KeyboardCodesSet.java
  • 七、key_styles_common.xml
  • 八、KeyboardState.java
  • 九、使用自定义按钮
  • 十、编译并把apk push到手机测试
  • 十一、番外


前言

LatinIME是Android AOSP中的一个开源输入法项目,利用该输入法可以完成多个国外语言的切换和输入,非常方便。本文就是实现在这个项目的基础上添加一个自定义按键,完成自己需要的功能。

一、引进图片按钮

准备三个图片

android 图标按键 安卓按键图标_java


其实这三个图片就是从

LatinIME\java\res\drawable-hdpi

android 图标按键 安卓按键图标_android 图标按键_02


这个目录里拿出来的,我没有设计自己的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
分别添加

<item name="iconTestKey">@drawable/sym_keyboard_shift_holo_dark</item>
<item name="iconTestKey">@drawable/sym_keyboard_shift_lxx_dark</item>
<item name="iconTestKey">@drawable/sym_keyboard_shift_lxx_light</item>

android 图标按键 安卓按键图标_Android_03


三个添加的方式都是一样的,但是添加的图标是不一样的。

三、attrs.xml

添加自定义的映射
LatinIME\java\res\values\attrs.xml

<attr name="iconTestKey" format="reference" />

android 图标按键 安卓按键图标_android 图标按键_04

四、KeyboardIconsSet.java

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,

android 图标按键 安卓按键图标_Android_05


android 图标按键 安卓按键图标_LatinIME_06

五、Constants.java

LatinIME\common\src\com\android\inputmethod\latin\common\Constants.java

public static final int CODE_TEST = -16;

android 图标按键 安卓按键图标_Android_07

case CODE_TEST: return "test";

android 图标按键 安卓按键图标_Android_08

六、KeyboardCodesSet.java

LatinIME\java\src\com\android\inputmethod\keyboard\internal\KeyboardCodesSet.java

"key_test",

android 图标按键 安卓按键图标_输入法_09

Constants.CODE_TEST,

android 图标按键 安卓按键图标_Android_10

七、key_styles_common.xml

添加按钮属性
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"/>

android 图标按键 安卓按键图标_Android_11

八、KeyboardState.java

添加自定义按钮的点击事件
LatinIME\java\src\com\android\inputmethod\keyboard\internal\KeyboardState.java

if (code != Constants.CODE_TEST) {
            Log.v("Test-lanjiabin","KeyboardState->onPressKey()->CODE_TEST");
        }

android 图标按键 安卓按键图标_Android_12

九、使用自定义按钮

在键盘中使用自定义按钮
把26键盘的最后一行的第一个按键设置为自定义按钮。我这里只是把原先的按键换成自己的按键而已。
LatinIME\java\res\xml\row_qwerty4.xml

<Key
            latin:keyStyle="toTestKeyStyle"
            latin:keyWidth="15%p" />

android 图标按键 安卓按键图标_Android_13

十、编译并把apk push到手机测试

编译并push按照自己的方法,在android源码中编译并push到自己手机。

效果图,其中圈起来的,就是自定义按钮,因为用的是上面大小写切换的icon,所以这两个长得一样。但是功能不一样。

android 图标按键 安卓按键图标_Android_14


点一下这个按钮,然后就是测试日志:

android 图标按键 安卓按键图标_java_15


对比点击事件的代码:

android 图标按键 安卓按键图标_android 图标按键_16


没错,到这里,我们自定义的按钮还有点击事件,成功了。

十一、番外

LatinIME\java\src\com\android\inputmethod\latin\inputlogic\InputLogic.java

case Constants.CODE_TEST:
                Log.v("Test_lanjiabin","InputLogic->handleFunctionalEvent->CODE_TEST");
                break;

android 图标按键 安卓按键图标_LatinIME_17