1 功能描述

  • 触屏设备主界面中有一个文本编辑框,底部区域固定显示一个数字键盘,键盘中除数字键外,还带有*和#键功能;
  • 提供一个自定义的数字输入法,生成apk安装包文件,嵌入到img镜像文件中去。

2 设计实现

  1. 创建类名为SimpleIME,继承父类InputMethodService,实现KeyboardView.OnKeyboardActionListener接口。
  2. 编写键盘对象加载的.xml文件。
  3. 重写onCreateInputView()方法,初始化键盘视图和创建键盘对象,使用键盘视图对象设置键盘的监听。
  4. 重写onKey、onPress、onRelease、onText、swipeDown、swipeLeft、swipeRight和swipeUp等方法,在onKey方法中可处理对键盘的操作,在这个方法里通过传入的primaryCode进行相应的操作。其他方法没有具体的实现。
  5. 配置清单文件的声明service,还向系统申请了IME的BIND_INPUT_METHOD权限,并且给IME添加了一个名称为android.view.InputMethod的过滤器,用来存放意图的属性。

3 贴出代码

  1. SimpleIME.java
import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.media.AudioManager;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputConnection;/*** @description: 自定义输入法* @version: v1.0* @author: yeyl* @date: 2018/6/26 14:57* @history:*/
public class SimpleIME extends InputMethodServiceimplements KeyboardView.OnKeyboardActionListener {private KeyboardView mKeyboardView;private Keyboard mKeyboard;/*** 大小写转换的flag*/private boolean mCaps = false;@Overridepublic View onCreateInputView() {mKeyboardView = (KeyboardView) getLayoutInflater().inflate(R.layout.layout_keyboard, null);mKeyboard = new Keyboard(this, R.xml.keyboard_number);mKeyboardView.setKeyboard(mKeyboard);mKeyboardView.setOnKeyboardActionListener(this);return mKeyboardView;}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {return super.onKeyDown(keyCode, event);}@Overridepublic void onKey(int primaryCode, int[] keyCodes) {InputConnection ic = getCurrentInputConnection();playClick(primaryCode);switch (primaryCode) {case Keyboard.KEYCODE_DELETE:// 回退ic.deleteSurroundingText(1, 0);break;case Keyboard.KEYCODE_SHIFT:// 大小写切换mCaps = !mCaps;mKeyboard.setShifted(mCaps);mKeyboardView.invalidateAllKeys();break;case Keyboard.KEYCODE_DONE:// 完成ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER));break;case Keyboard.KEYCODE_CANCEL:// 取消ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));break;default:char code = (char) primaryCode;if (Character.isLetter(code) && mCaps) {code = Character.toUpperCase(code);}ic.commitText(String.valueOf(code), 1);}}/*** 播放按键音** @param keyCode 键码*/private void playClick(int keyCode) {AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);switch (keyCode) {case 32:am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR);break;case Keyboard.KEYCODE_DONE:case 10:am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN);break;case Keyboard.KEYCODE_DELETE:am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE);break;default:am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD);}}@Overridepublic void onPress(int primaryCode) {}@Overridepublic void onRelease(int primaryCode) {}@Overridepublic void onText(CharSequence text) {}@Overridepublic void swipeDown() {}@Overridepublic void swipeLeft() {}@Overridepublic void swipeRight() {}@Overridepublic void swipeUp() {}
}
  1. layout_keyboard.xml
<?xml version="1.0" encoding="UTF-8"?>
<android.inputmethodservice.KeyboardView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/keyboard"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:keyPreviewLayout="@layout/layout_preview" />
  1. layout_preview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFF00"android:gravity="center"android:textSize="30sp"android:textStyle="bold" />
  1. keyboard_number.xml
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"android:horizontalGap="0px"android:keyWidth="33.3%p"android:keyHeight="9%p"android:verticalGap="0px"><Row><Keyandroid:codes="49"android:keyEdgeFlags="left"android:keyLabel="1" /><Keyandroid:codes="50"android:keyLabel="2" /><Keyandroid:codes="51"android:keyEdgeFlags="right"android:keyLabel="3" /></Row><Row><Keyandroid:codes="52"android:keyEdgeFlags="left"android:keyLabel="4" /><Keyandroid:codes="53"android:keyLabel="5" /><Keyandroid:codes="54"android:keyEdgeFlags="right"android:keyLabel="6" /></Row><Row><Keyandroid:codes="55"android:keyEdgeFlags="left"android:keyLabel="7" /><Keyandroid:codes="56"android:keyLabel="8" /><Keyandroid:codes="57"android:keyEdgeFlags="right"android:keyLabel="9" /></Row><Row android:rowEdgeFlags="bottom"><Keyandroid:codes="-3"android:keyEdgeFlags="left"android:keyLabel="*" /><Keyandroid:codes="48"android:keyLabel="0" /><Keyandroid:codes="-4"android:isRepeatable="true"android:keyEdgeFlags="right"android:keyLabel="完成" /></Row>
</Keyboard>
  1. AndroidManifest.xml
        <serviceandroid:name=".SimpleIME"android:label="@string/simple_ime"android:permission="android.permission.BIND_INPUT_METHOD"><meta-dataandroid:name="android.view.im"android:resource="@xml/method" /><intent-filter><action android:name="android.view.InputMethod" /></intent-filter></service>
  1. method.xml
<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android"><subtypeandroid:imeSubtypeLocale="en_US"android:imeSubtypeMode="keyboard"android:label="@string/subtype_en_US" />
</input-method>

4 Demo截图

Android自定义输入法软键盘相关推荐

  1. Android 自定义安全软键盘 SafeKeyboard 开发详细说明 2.0

    Android 自定义安全软键盘 SafeKeyboard 开发详细说明 2.0 源码地址:GitHub:    https://github.com/SValence/SafeKeyboard 注意 ...

  2. android 输入法 确定按钮,Android项目:输入法软键盘显示/隐藏的监听和控制,InputMethodManager用法研究...

    在项目开发中,用到编辑框的地方经常涉及到要监听或者控制软键盘的显示/隐藏状态.本以为这是很容易解决的一个小问题,没想到当初碰到这个问题才明白还得花点小心思才能整好.现将针对软键盘的显示/隐藏状态的监听 ...

  3. Android开发笔记(一百四十八)自定义输入法软键盘

    手机上输入文字,都是通过系统自带的软键盘,这个软键盘可以是Android自带的,也可以是第三方软键盘如搜狗输入法.多数情况下面,系统自带的软键盘已经够用了,可是总有少数情况,系统软键盘无法满足开发者的 ...

  4. Android自定义记账软键盘(仿鲨鱼记账的记账功能)

    鲨鱼记账App效果: 本文实现的效果图: 本文 不是什么原理分析,属于使用工具,不再具体分析.直接贴图贴代码了 自定义软键盘的XML模版 注:android:codes的值,请参考ASCII < ...

  5. android 自定义数字软键盘,Android自定义键盘的实现(数字键盘和字母键盘)

    在项目中,产品对于输入方式会有特殊的要求,需要对输入方式增加特定的限制,这就需要采用自定义键盘.本文主要讲述数字键盘和字母键盘的自定义实现. 自定义键盘的实现步骤如下: 自定义CustomKeyboa ...

  6. Android 设置输入法[软键盘]将底部布局推上去

    效果 说明: 1适用范围Android 6.0(23)及以上,Android 5.0标题栏不太适配,看注释 2.也可以使用popwindow来实现,晚上很多例子了 操作如下 1.设置Manifest中 ...

  7. Android小技巧 自动关闭输入法软键盘

    一.简介 作用:获取编辑框的最大长度,当输入后文本长度等于最大长度则关闭软键盘. 使用场景:手机号,固定位数的密码,验证码 二.代码部分 工具类 ViewUtil.java public class ...

  8. Android点击空白区域,隐藏输入法软键盘

    很多时候,我们在使用应用时,会出现输入法软键盘弹出的问题,通常情况下,我们默认会使用户点击返回键或者下一步对软键盘进行隐藏.为了更好的体验,我们可以实现当用户使用完毕软键盘时.点击空白区域即可实现隐藏 ...

  9. 安卓输入法弹出后css横屏,mui开发安卓端,输入法软键盘导致css横屏样式判断触发...

    mui开发安卓端,输入法软键盘导致css横屏样式判断触发 mui开发安卓端,输入法软键盘导致css横屏样式判断触发 css 横屏媒体查询 @media screen and (orientation: ...

最新文章

  1. python饼图怎么显示中文_python生成饼图解决中文乱码
  2. 玩cf出现outofmemory_CF从女主播秀腿到假赛被罚,还能站在电竞上吗?
  3. 每秒处理请求数和并发的关系
  4. 计算机一级办公软件试题,计算机一级《MS Office》练习题(含答案)
  5. 6/12 Sprint2 看板和燃尽图
  6. InstallShield SdShowMsg未关闭导致安装程序无法停止
  7. C++笔记-空指针加强、auto自动类型
  8. NPOI设置Excel中的单元格识别为日期
  9. word写文章 格式总是对不齐 一定要看 解决99%问题
  10. matlab函数mapminmax,Matlab的mapminmax函数说明[转]
  11. 单位换算:秒(s)/毫秒(ms)/微秒(us)/纳秒(ns)/皮秒(ps)之间密尔(mil)/毫米(mil)/英尺(inch)之间
  12. 机械硬盘显示数据错误循环冗余检查文件如何寻回
  13. 对自己的反思 (闲暇中的面试总结)
  14. TED | 25岁前,请逼自己成为这样的人
  15. hdmi接口有什么用_VGA、DVI、HDMI、DP、TYPE-C接口都有什么区别?
  16. PTA Python习题 身份证号码输出性别与出生日期
  17. python_selenium项目_批量获取企业信用代码
  18. 无法识别USB设备解决办法
  19. python27读书笔记0.1
  20. iphone邮箱看不到已发送_不看不知道 教你如何设置iPhone邮箱

热门文章

  1. 【网安神器篇】——enum4linux枚举工具
  2. RGB图像卷积生成Feature map特征图过程
  3. linux中audit服务,linux下的audit服务
  4. 上班第一天的报错(AWVS卸载不彻底)
  5. 算法精品讲解(2)——DP问题入门(适合零基础者,一看就会)
  6. Java 轮询(重发)机制
  7. 关于证书(certificate)和公钥基础设施(PKI)的一切
  8. 公司价值评估-自由现金流法
  9. 树莓派编译ffmpeg支持x264硬解码播放视频
  10. linux系统查看串口占用,Linux 系统串口信息查看