Android输入法与软键盘简单分析
2011-06-20 23:12
477 查看
Android输入法与软键盘简单分析
原文地址:http://www.longene.org/forum/viewtopic.php?f=5&t=3935以源代码中/android_src/packages/inputmethod/LatinIME/为例。
我们已经知道了软键盘是由输入法调出的,并且弹出软键盘的语句为:
代码: 全选
InputMethodManager imm = null; imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(vv, InputMethodManager.SHOW_FORCED);
android.view.inputmethod.InputMethodManager,你可以通过Context.getSystemService方法来获取。它允许你和全局输入法状态进行交互,例如显式隐藏或者显示IME的输入法区域。
在输入法中,有两种可视元素,软键盘和候选字区域,即keyboard view和candiate view。
这里着重讨论的是软键盘,其实后选字区域与软键盘也大同小异。
当输入法第一次展现的时 候,InputMethodService.onCreateInputView()就会被调用。Candidates View,是候选词汇集合出现的地方。其可有可无,可以在调用InputMethodService.onCreateCandidatesView时返 回null,–这是它的默认行为。
InputMethodService.java在/android_src/frameworks/base/core/java/android/inputmethodservice/下:
阅读其中的 onCreateInputView(),结果发现该函数不执行任何代码,只返回一个null。
原来不同的输入法会重写该方法。
在latinIME中的LatinIME.java中的onCreateInputView():
代码: 全选
195 @Override 196 public View onCreateInputView() { 197 mInputView = (LatinKeyboardView) getLayoutInflater().inflate( 198 R.layout.input, null); 199 mKeyboardSwitcher.setInputView(mInputView); 200 mKeyboardSwitcher.makeKeyboards(); 201 mInputView.setOnKeyboardActionListener(this); 202 mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0); 203 return mInputView; 204 }
由以上代码可以知道在输入法service中对软键盘进行了初始化。
在onStartInputView()函数中,传入一个EditorInfo对象来判断输入的类型,并由此弹出不同类型的软键盘,比如数字键盘,全尺寸键盘等等。
四种不同的类型为:
代码: 全选
TYPE_CLASS_NUMBER TYPE_CLASS_DATETIME TYPE_CLASS_PHONE TYPE_CLASS_TEXT
![](http://writeblog.csdn.net/images/smilies/icon_e_smile.gif)
大家有什么见解可以一起讨论讨论~
页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 timeboy 于 2009-10-27 14:38
mKeyboardSwitcher变量是哪里定义的
timeboy 帖子: 423 注册: 2008-12-10 12:28 页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 zxbeef 于 2009-10-28 8:26
timeboy 写道:mKeyboardSwitcher变量是哪里定义的
mKeyboardSwitcher是该输入法自己写的类,控制输入的模式。
zxbeef 帖子: 577 注册: 2009-03-04 14:33 页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 timeboy 于 2009-10-28 9:22
执行完onCreateInputView里的程序,软键盘就可以弹出来了?
timeboy 帖子: 423 注册: 2008-12-10 12:28 页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 zxbeef 于 2009-10-28 15:54
timeboy 写道:执行完onCreateInputView里的程序,软键盘就可以弹出来了?
onCreateInputView()函数中:
代码: 全选
mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);
而在KeyboardSwitcher的setKeyboardMode()函数中:
代码: 全选
mInputView.setKeyboard(keyboard);
这样就能显示键盘了。
zxbeef 帖子: 577 注册: 2009-03-04 14:33 页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 timeboy 于 2009-10-29 9:53
zxbeef 写道:
timeboy 写道:执行完onCreateInputView里的程序,软键盘就可以弹出来了?
onCreateInputView()函数中:
代码: 全选
mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);
而在KeyboardSwitcher的setKeyboardMode()函数中:
代码: 全选
mInputView.setKeyboard(keyboard);
这样就能显示键盘了。
好的,还应该把android里整体输入法结构分析一下,不如,输入法管理模块(不知道这个是不是一个进程),程序与管理模块和输入法模块的关系
timeboy 帖子: 423 注册: 2008-12-10 12:28 页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 zxbeef 于 2009-10-29 10:01
timeboy 写道:好的,还应该把android里整体输入法结构分析一下,不如,输入法管理模块(不知道这个是不是一个进程),程序与管理模块和输入法模块的关系
对的,不过这需要时间完整详细的整理代码。。。
zxbeef 帖子: 577 注册: 2009-03-04 14:33 页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 timeboy 于 2009-10-29 10:11
zxbeef 写道:
timeboy 写道:好的,还应该把android里整体输入法结构分析一下,不如,输入法管理模块(不知道这个是不是一个进程),程序与管理模块和输入法模块的关系
对的,不过这需要时间完整详细的整理代码。。。
这个是个大工程啊,要完整分析不太容易
timeboy 帖子: 423 注册: 2008-12-10 12:28 页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 zxbeef 于 2009-10-29 10:13
timeboy 写道:这个是个大工程啊,要完整分析不太容易
是的,一点点分部分慢慢来。。。
zxbeef 帖子: 577 注册: 2009-03-04 14:33 页首
Re: Android输入法与软键盘简单分析
![](http://writeblog.csdn.net/styles/prosilver/imageset/icon_post_target.gif)
由 alexguitar 于 2010-04-20 20:37
请问一下有人知道如何让预设的soft keyboard layout 缩小吗?我在LatinIME/res/layout/input.xml修改
android:layout_width="fill_parent"
android:layout_height="wrap_content"
为
android:layout_width="50px"
android:layout_height="20px"
都没反应
麻烦版上的大大帮我一下
谢谢
相关文章推荐
- Android输入法与软键盘简单分析
- android 电视盒下XBMC源码功能的简单分析
- Android recovery.img与boot.img简单对比分析
- android 【点击输入框调出输入法前的】输入框获取焦点和输入法的初始化分析
- android自动旋转简单分析
- android电源管理简单分析
- Android 事件拦截机制、事件分发机制简单分析
- 和菜鸟一起学android4.0.3源码之wifi的简单分析
- Android内核的简单分析
- AndroidSlidingUpPanel 使用控制和简单的分析方法
- android其实很简单 -- Glide简单分析
- android build 过程 (ramdisk.img、sytem.img、userdata.img)和 启动过程简单分析
- 通过Android录音进行简单音频分析
- 和菜鸟一起学android4.0.3源码之wifi direct的简单分析
- Android之输入法开发简单说明
- android 默认隐藏输入法软键盘
- 天天记录 - Android requestLayout源码简单分析
- Android开源项目pulltorefresh分析与简单使用
- Android内核的简单分析
- android build 过程 (ramdisk.img、sytem.img、userdata.img)和 启动过程简单分析