转载博客:http://kinglaw05.blog.163.com/blog/static/596833142012102104956137/ 一、实现android横屏模式下,禁止原生输入法PinYinIME全屏输入模式。 使用PinYinIME时,往往会遇到以下情景,文本框设定了不显示抽取框的参数(可理解为不允许输入法全屏);而输入法经过frameworks inputmethodservice后,跑了全屏显示的流程(见以下代码),导致图一所示看不到候选字的尴尬场面。 ***************************************************************************************************************************** 文件:android/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java public boolean onEvaluateFullscreenMode() { Configuration config = getResources().getConfiguration(); if (config.orientation != Configuration.ORIENTATION_LANDSCAPE) { return false; } if (mInputEditorInfo != null && (mInputEditorInfo.imeOptions & EditorInfo.IME_FLAG_NO_FULLSCREEN) != 0) { return false; } return true; } 第一个if判断当前是否为全屏;第二个if主要判断输入法选项中是否设置了IME_FLAG_NO_FULLSCREEN。 *****************************************************************************************************************************
图一
由上文可知,解决办法有二。一是直接修改InputMethodService.java的方法onEvaluateFullscreenMode,直接返回false,如下: ***************************************************************************************************************************** 文件:android/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java public boolean onEvaluateFullscreenMode() { Configuration config = getResources().getConfiguration(); if (config.orientation != Configuration.ORIENTATION_LANDSCAPE) { return false; } if (mInputEditorInfo != null && (mInputEditorInfo.imeOptions & EditorInfo.IME_FLAG_NO_FULLSCREEN) != 0) { return false; } //return true; return false; } *****************************************************************************************************************************
第二个方法是,PinYinIME实例化出来的EditorInfo中,显式设置IME_FLAG_NO_FULLSCREEN标志。如下: *****************************************************************************************************************************
文件:android/packages/inputmethods/PinyinIME/src/com/android/inputmethod/pinyin/InputModeSwitcher.java public int requestInputWithHkb(EditorInfo editorInfo) { ...... mEditorInfo = editorInfo; mEditorInfo.imeOptions |= EditorInfo.IME_FLAG_NO_FULLSCREEN; saveInputMode(newInputMode); prepareToggleStates(false); return mInputIcon; } ***************************************************************************************************************************** 上述两种处理方法,均可达到图二的效果。方法一将影响整合系统,所有输入法应用程序在横屏模式下都会被禁止全屏,故建议采用方法二处理。 图二


二、调整android横屏模式下PinYinIME键盘显示的高度。 文件:android/packages/inputmethods/PinyinIME/src/com/android/inputmethod/pinyin/Environment.java 将KEY_HEIGHT_RATIO_LANDSCAPE修改成你想要的数值,如: private static final float KEY_HEIGHT_RATIO_LANDSCAPE = 0.100f; 效果如图三;配合字体大小、位置的调整,压扁后的键盘,会更好看,在此不作介绍。 图三

更多相关文章

  1. Linux Android(安卓)反编译
  2. Android中assets目录和raw目录的区别和使用情况
  3. android 键盘的遮挡输入框的问题
  4. 【Android笔记 九】Android(安卓)Sharedpreferences实现用户偏好
  5. 开始启程,你的第一行
  6. Android资源文件strings实现特殊字符转义
  7. ContentProvider基本使用
  8. android Listview 软引用SoftReference异步加载图片
  9. android 手机存储文件夹学习

随机推荐

  1. 使用 IntraWeb (31) - IntraWeb 的 Xml
  2. C++(template模板 && 函数模板)
  3. C++(template模板 && 类模板 碰到继承)
  4. 使用 IntraWeb (26) - 基本控件之 TIWMen
  5. Delphi 中的自动释放策略
  6. 使用 IntraWeb (32) - Url 映射与 THandl
  7. XP 之后, Delphi 动注册表不方便了...逼
  8. 终于, Delphi XE2 携带 GDI+ 库了
  9. 使用 IntraWeb (33) - Cookie
  10. 看看 Delphi XE2 为 VCL 提供的 14 种样