码字辛苦!转载请注明出处!

0、前言

最近在做个远程终端,需要远程输入文字,但因为网络传输原因,经常发生点击变成长按,双击等等问题……

于是产品提出了需求,做一个远程的输入法,我想着安卓十年,区区输入法应该早就资料一抓一把了吧——

——没想到啊没想到,安卓官方输入法文档写的稀烂,相关资料也是对着官方文档抄,根本没法用!!!

气抖冷的我于是决定,自己写一篇真正意义上的文档了,哼!

1、创建服务

先创建一个继承InputMethodService的class

public class FastInputIME extends InputMethodService{}

然后声明服务

<service android:name="FastInputIME"android:label="牛逼哄哄的输入法"android:permission="android.permission.BIND_INPUT_METHOD"><intent-filter><action android:name="android.view.InputMethod" /></intent-filter><meta-data android:name="android.view.im"android:resource="@xml/method" />
</service>

最后使用万能键(Alt+Enter)创建缺失的@xml/method文件,写入以下内容

<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android"android:settingsActivity="com.package.SettingsActivity"android:supportsSwitchingToNextInputMethod="true">
</input-method>

此时,已经可以在设置中看到牛逼轰轰的输入法了:

2.创建键盘布局

为了简单好读,写个非常非常简单的数字键盘,注意,标签名是Keyboard,而不是语法提示中的KeyboardView:

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Row><Key android:codes="1" android:keyLabel="1" /><Key android:codes="2" android:keyLabel="2" /><Key android:codes="3" android:keyLabel="3" /><Key android:codes="4" android:keyLabel="4" /><Key android:codes="5" android:keyLabel="5" /><Key android:codes="6" android:keyLabel="6" /><Key android:codes="7" android:keyLabel="7" /><Key android:codes="8" android:keyLabel="8" /><Key android:codes="9" android:keyLabel="9" /><Key android:codes="0" android:keyLabel="0" /></Row>
</Keyboard>

其中,keyLabel是显示在按键上的文字,codes就是等会儿监听要使用的keycode了~

3.创建回调,绑定键盘,添加输入事件

因为很简单,大家看我写了注释的部分就可以啦~

package com.eternity.lab;import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;public class FastInputIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener {private InputConnection ic;@Overridepublic View onCreateInputView() {KeyboardView keyboardView = new KeyboardView(getApplicationContext(), null);//在此处导入键盘布局Keyboard keyboard = new Keyboard(getApplicationContext(), R.layout.keyboard);keyboardView.setKeyboard(keyboard);keyboardView.setOnKeyboardActionListener(this);return keyboardView;}@Overridepublic void onWindowShown() {super.onWindowShown();/** 进入此回调时,用户将开始输入在此时保存InputConnection,用于后续的输入操作 **/ic = getCurrentInputConnection();}@Overridepublic void onWindowHidden() {super.onWindowHidden();/** 进入此回调时,用户已结束输入在此时清理InputConnection **/ic = null;}@Overridepublic void onPress(int primaryCode) {/** 此处的primaryCode,即键盘布局中的code属性,可以根据code来commit需要输入的文字第二个参数是输入的位置,注意是从右往左,0代表向右边插入一个字符 **/ic.commitText("" + primaryCode, 0);}@Overridepublic void onRelease(int primaryCode) {}@Overridepublic void onKey(int primaryCode, int[] keyCodes) {}@Overridepublic void onText(CharSequence text) {}@Overridepublic void swipeLeft() {}@Overridepublic void swipeRight() {}@Overridepublic void swipeDown() {}@Overridepublic void swipeUp() {}
}

至此,一个简易的自定义输入法就完成了~

剩下的复杂功能,就可以看文档一一实现了:

https://developer.android.google.cn/guide/topics/text/creating-input-method

最后是惯例讨钱:

快速实现安卓输入法!相关推荐

  1. 云信小课堂|5分钟快速实现安卓端PK连麦场景

    Vol. 3 2021年开年,音频社交风靡互联网,语音社交再成风口,直播连麦开启社交新赛道.在实时通信技术不断革新的现状下,直播平台需要不断探索新的方式以满足用户日益增长的需求,直播连麦就是在此背景下 ...

  2. 网易云信集成视频教程(一):如何快速实现安卓登录登出?

    由于网易云信稳定.可靠的技术服务以及拥有深厚积淀的行业口碑,越来越多用户集成云信IM和音视频功能.为了提升用户集成效率,我们推出了一系列网易云信集成视频教程,希望帮助用户快速实现功能接入.第一期将为大 ...

  3. 如何快速开发安卓app? 用传统的编程工具不行,试试猎码中文开发!

    我们都知道,在之前,传统的安卓开发工具是用eclipse.一款国外的软件,需要安装插件才能支持安卓开发,还要下载各种sdk啥的!总之,光配置就是一件麻烦的事!这几年才有了谷歌开发的Android St ...

  4. 利用Bmob快速实现安卓的简单登陆注册功能Bmobsdk3.6.9版本亲测可用(详细图文攻略附带处理小bug)

    前言:从其他人的留言中我知道Bmob这个云数据库,之前我一直在自己写后台但是发现太慢了要学的东西超级多,脚手架也不知道为什么老是搭不上很蛋疼,然后春节又必须回来老家山区里面有些事情耽搁了后台也凉了,后 ...

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

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

  6. 输入年月日 输出该日期是星期几。javascript_快速提升拼音输入法的几个技巧 高手都会用!...

    由于五笔输入法的难度性,拼音输入法已经成为了主流,可是你知道吗?拼音输入法中还有一些小技巧: 注意:这里所说的拼音输入法包含:微软拼音.搜狗拼音.百度拼音.QQ拼音等,本文示范使用微软拼音(因为实在不 ...

  7. 安卓python安装库_如何快速在安卓上搭建python3环境

    1 下载并安装Pydroid 3到安卓设备上.安装好的软件如图. 2 打开软件,可以看到编辑界面.我们可以在此处进行代码的编写,保存为py文件后点击右下角的淡黄色按钮即可运行程序. 3 打开菜单,可以 ...

  8. hook 输入法 android,安卓输入法输入性能评测流程

    在我们的安卓版按键率评测的自动化处理整体流程主要包括三步,模仿键入操作,实时读取输入法的反馈与数据存储,以及数据分析.整个自动化处理的流程模拟人的真实操作环境,并能通过读取输入法的实时反馈判断输入法的 ...

  9. android wifi优化,WiFi信号如何快速优化? 安卓APP来帮忙

    Wi-Fi信号是无形的.捉摸不定的,但是它的出现却为我们的生活带来了翻天覆地的变化,令信息的传送更加自由.快捷和方便.可是你是不是正遭遇家中无线信号不稳定的困扰呢?如果是的话,如何对Wi-Fi信号进行 ...

  10. 5安卓输入法键盘显示 搜索_iPad使用键盘对比体验,连快捷键也可以用,让我重新认识生产力...

    大家好,我是石春苗,一个闷骚的男人 好,进入正题,平时用iPad的时候,给人回个消息打字的时候很痛苦,放平打字容易误触,两个手指又间距太远,也没有想过要给它配一个键盘,毕竟有句话说得好,买前生产力,买 ...

最新文章

  1. [Android Pro] AndroidStudio IDE界面插件开发(进阶篇之Action机制)
  2. 50岁,他希望自己还可以写代码
  3. Python中生成一个指定长度的随机字符串实现示例
  4. JAVA基础——编程练习(二)
  5. php snoopy视频教程,php的Snoopy类
  6. 在不如意的世界里全力以赴_我如何在“外展之旅”中全力以赴
  7. python数据分析-python数据统计分析
  8. 09-TensorFlow 基于WDCNN的轴承故障诊断
  9. uwb定位与wifi、蓝牙和RFID定位技术的区别
  10. 局域网,手机与电脑文件共享
  11. IBM这20年(1999-2019)
  12. Andro Studio 基于Zing一维码二维码扫描代码
  13. 屏幕进入省电模式计算机未输出,戴尔 U2719DC 显示器使用与故障处理指南
  14. MSDC 4.3 接口规范(9)
  15. 【非原创】这一生至少当一次傻瓜(r4笔记第88天)
  16. windows10系统装cad2007提示缺少NET组件
  17. Google浏览器中扩展插件方法
  18. oracle 11g 连接远程服务器 数据库
  19. 海外网红KOL营销的合作方式
  20. DSP在线升级方案:TMS320C6678使用网络或者串口输出升级数据进行固件升级

热门文章

  1. 将Flutter添加到现有应用——过程中遇到的问题
  2. 前端三件套之CSS(二)
  3. 人工智能轨道交通行业周刊-第15期(2022.9.19-9.25)
  4. c++ Win x64 注册表操作
  5. F5 LTM fullnat模式测试记录及配置
  6. oracle修改表字段名备注_ORACLE 动态SQL 给每个字段添加中文备注
  7. pythonarray去除inf_Python中的inf与nan
  8. 【CDH安装】scm_prepare_database.sh使用
  9. Boost serialization
  10. 尘梦回还服务器在维护中是什么意思,20190925维护公告解读