Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 790|回复: 0

[实例教程]LatinIME输入法分析

[复制链接]

该用户从未签到

发表于 2011-10-22 13:58:43 | 显示全部楼层 |阅读模式
输入法的设置在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和像素之间进行转换时出问题了。
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:58:52 | 显示全部楼层

Re:[实例教程]LatinIME输入法分

学习!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-19 01:09 , Processed in 0.347677 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表