android PinYinIME横屏模式禁止全屏输入 & 调整横屏模式下键盘高度

xiaoxiao2021-02-27  197

一、实现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; 效果如图三;配合字体大小、位置的调整,压扁后的键盘,会更好看,在此不作介绍。 图三 to the end...... 
转载请注明原文地址: https://www.6miu.com/read-15924.html

最新回复(0)