输入法的设置在res/xml/method.xml的<input-method>标签中,主要设置两个属性:

android:settingsActivity,输入法的设置程序入口。

android:isDefault,这个输入法是不是系统的默认输入法。

另外,如果输入法的apk直接push到/system/app/下面的话,算是系统输入法,如果是以第三方程序的方式安装到/data/app/下面的话,算是第三方输入法,两个输入法目前来看,最大的不同在于,使用第三方输入法时必须在设置->语言和键盘当中手工启动。

最基本的字母布局由res/xml/下面的kbd_qwerty.xml,kbd_qwerty_black.xml定义,其它的还有符号布局,数字布局等也都在这个文件夹下面。当用户进行操作时,程序就会在这些布局之间来回切换。

对这些布局的解析由Keyboard(位于framework中)以及它的子类LatinIME(位于Latin输入法的源码中)一起完成,涉及到的主要方法有:

1、loadKeyboard:解析布局文件

2、LatinKeyboard.createKeyFromXml,Keyboard.createKeyFromXml:从XML文件创建一个按键。

3、getDimensionOrFraction:获取某一个属性的值。这个属性值的格式必须规定为Dimen(dip,px,sp,in等)或者Fraction(百分比)的。

4、LatinKeyboardBase.onBufferDraw:把所有的Key绘制在一张Bitmap上,再由继承自ViewonDraw方法把这张Bitmap渲染到onDraw传递过来的Canvas上。

绘制Key的时候,主要绘制两个东西,label和icon。对于a,b,c,1,2,&等这样可以用字符来表示的键,就绘制它的label属性。对于Shift,Alt等这样无法用字符表示的键,就绘制它的icon属性。

另外,大部分Key只绘制icon或label中的一个。而少部分Key,两个都绘制。比如qwertyuiop这几个Key,还会在Key的右上方有一个小的数字,这些小数字每一个都是一个icon,存放在LatinKeyboard的mNumberHintIcons数组中。而qwertyuiop这几个Key是一组比较特殊的Key,它们会在LatinKeyboard中有一个引用备份:mNumberHintKeys。每次用户按Shift来更新键盘布局时,除了会更新这几个Key的label之外,都会调用updateNumberHintKeys方法把它们的icon也赋值。

这次遇到的问题是LatinIME布局混乱,打开这个输入法时,整个输入法界面被挤在屏幕下方一个高度很小的矩形范围内。经过跟踪,发现输入法的布局的高度宽度,每个Key的高度宽度等信息都是定义在dimens.xml中的。而在dimens.xml中,这些尺寸的单位都是in,在程序当中把这些单位转化成像素以后,是个很小的值。最后把这些尺寸单位改为dip,并设置好合适的值就好了。看来是系统移植到板子上以后,in和像素之间进行转换时出问题了。

LatinIME输入法分析相关推荐

  1. amlogic平台,给LatinIME输入法添加语言

    amlogic平台,给LatinIME输入法添加语言 1.frameworks\base\packages\SettingsProvider\res\values\defaults.xml 添加 &l ...

  2. Android原生拼音输入法分析

    在Android官方Blog介绍了Android平台输入法的生命周期,如下图 (图片来自 http://android-developers.blogspot.com/search/label/Inp ...

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

    文章目录 前言 一.引进图片按钮 二.添加映射 三.attrs.xml 四.KeyboardIconsSet.java 五.Constants.java 六.KeyboardCodesSet.java ...

  4. LatinIME输入法的一些总结

    1.关于输入法的一些设置重要文件 res/xml/method.xml 在该文件中在前面的博客http://blog.csdn.net/holdrise/article/details/8792294 ...

  5. latinime输入法研究

    研究了下http://download.csdn.net/download/joyfly2008/5628655这位兄弟的文档写的很详细 另外: 输入法的设置在res/xml/method.xml的& ...

  6. java 切换系统输入法_系统语言改变时,输入法变成默认输入法分析

    当系统的语言改变时,选择的输入法会变成默认输入法: 实现的过程在:InputMethodManagerService.java中的: mContext.registerReceiver(// 这里对语 ...

  7. 关于Android 5.1 LatinIME的分析

    因为公司产品是一款vr,是没有触摸屏的,所有要想用蓝牙手柄操控LatinIME就得进行修改 LatinIME最主要的就是一个继承InputMethodService的服务,类名就是LatinIME.j ...

  8. Android 输入法增加语言

    Android源码中默认的有三种输入法:英文,中文,日文.对应的工程代码路径为: <android_root>/packages/inputmethods/LatinIME/ <an ...

  9. Android 10 去掉系统默认谷歌输入法

    代码路径:build/make/target/product/automotive_product.mk 1.在automotive_product.mk文件中添加LatinIME 输入法 PRODU ...

最新文章

  1. su 和su -的区别
  2. 我的Android进阶之旅------gt;Android中MediaRecorder.stop()报错 java.lang.RuntimeException: stop failed....
  3. django3.2.8使用simpleui注意事项
  4. delphi——用线程创建一个窗体笔记
  5. 机房重构 之 抽象工厂+反射+配置文件 实现数据库訪问
  6. C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
  7. 我的领域驱动设计运用实例 - 领域啊领域
  8. jzoj2137-(GDKOI2004)城市统计【二维前缀和,bfs】
  9. tf调不到keras怎么 回事_格力变频空调快速维修方法及技巧 空调压缩机不到一分钟就停,怎么回事?...
  10. 32张感恩海报!武汉市文化和旅游局这波操作太可以了
  11. 5分钟掌握var,let和const异同
  12. Linux中zsh插件,ubuntu / zsh shell / oh-my-zsh / 常用插件
  13. 【python】Python的基本数据类型之运算符
  14. Facebook跟踪用户手机地理位置 并借此推介朋友
  15. C99标准的新特性介绍
  16. 联想拯救者R720笔记本换三星970 EVO PLUS 500G固态硬盘与加装联想内存条16GX2,固态硬盘降温设置方法
  17. 国外lead,广告联盟常见的任务类型和操作方法
  18. 去除迅雷右侧资源信息栏和迅雷广告,以及迅雷的速度限制修改
  19. 阿里数据仓库-数据模型建设方法总结(全)
  20. 2021-下载酷狗音乐-爬虫-java

热门文章

  1. 大佬们的书单|速来薅羊毛了!
  2. 【甄选靶场】Vulnhub百个项目渗透——项目十三:SickOs 1.2(防火墙绕过,计划任务写入)
  3. java组装json_java 中 json的组装
  4. c语言ab互质,C语言:互质
  5. c#服务器后端_C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)
  6. mysql空间函数汇总
  7. JSP文件创建,虚拟目录访问
  8. 乘风破浪,迎接大二——暑假生活总结
  9. buu-[FlareOn5]Ultimate Minesweeper
  10. JAVA Eclipse下载使用教程