Android AOSP LatinIME输入法自定义图片按钮

文章目录

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

前言

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

一、引进图片按钮

准备三个图片
Android AOSP LatinIME输入法自定义图片按钮_第1张图片
其实这三个图片就是从
LatinIME\java\res\drawable-hdpi
Android AOSP LatinIME输入法自定义图片按钮_第2张图片
这个目录里拿出来的,我没有设计自己的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

Android AOSP LatinIME输入法自定义图片按钮_第3张图片
三个添加的方式都是一样的,但是添加的图标是不一样的。

三、attrs.xml

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

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

Android AOSP LatinIME输入法自定义图片按钮_第4张图片

四、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 AOSP LatinIME输入法自定义图片按钮_第5张图片
Android AOSP LatinIME输入法自定义图片按钮_第6张图片

五、Constants.java

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

 public static final int CODE_TEST = -16;

Android AOSP LatinIME输入法自定义图片按钮_第7张图片

case CODE_TEST: return "test";

Android AOSP LatinIME输入法自定义图片按钮_第8张图片

六、KeyboardCodesSet.java

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

 "key_test",

Android AOSP LatinIME输入法自定义图片按钮_第9张图片

 Constants.CODE_TEST,

Android AOSP LatinIME输入法自定义图片按钮_第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 AOSP LatinIME输入法自定义图片按钮_第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 AOSP LatinIME输入法自定义图片按钮_第12张图片

九、使用自定义按钮

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

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

Android AOSP LatinIME输入法自定义图片按钮_第13张图片

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

编译并push按照自己的方法,在android源码中编译并push到自己手机。
效果图,其中圈起来的,就是自定义按钮,因为用的是上面大小写切换的icon,所以这两个长得一样。但是功能不一样。
Android AOSP LatinIME输入法自定义图片按钮_第14张图片
点一下这个按钮,然后就是测试日志:
Android AOSP LatinIME输入法自定义图片按钮_第15张图片
对比点击事件的代码:
Android AOSP LatinIME输入法自定义图片按钮_第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 AOSP LatinIME输入法自定义图片按钮_第17张图片

你可能感兴趣的:(Android开源)