InputMethod Framework
来源:互联网 发布:ps制作淘宝宝贝描述 编辑:程序博客网 时间:2024/06/03 21:06
引用注明出处,出错见谅!http://write.blog.csdn.net/postedit/6664806
研究了一下输入法:
frameworks/base/services/java/com/android/server/SystemServer.java
系统启动过程中建立InputMethodManager服务,并添加到ServiceManger维护的列表中:
try {
Slog.i(TAG, "Input Method Service");
imm = new InputMethodManagerService(context, statusBar);
ServiceManager.addService(Context.INPUT_METHOD_SERVICE, imm);
} catch (Throwable e) {
Slog.e(TAG, "Failure starting Input Manager Service", e);
}
}
frameworks/base/services/java/com/android/server/InputMethodManagerService.java
获取系统已经安装的所有输入法:
List<ResolveInfo> services = pm.queryIntentServices(
new Intent(InputMethod.SERVICE_INTERFACE),
PackageManager.GET_META_DATA);
然后将系统所有输入法添加到InutMethodManagerService列表中。
public void systemReady() {
synchronized (mMethodMap) {
if (!mSystemReady) {
mSystemReady = true;
try {
startInputInnerLocked();
} catch (RuntimeException e) {
Slog.w(TAG, "Unexpected exception", e);
}
}
}
}
开机启动输入法完成。
切换window:
frameworks/base/core/java/android/view/ViewRoot.java
ViewRoot 接收来自WindowManagerService 的焦点变化消息:WINDOW_FOCUS_CHANGED, 启动输入法:
if (imm != null && mLastWasImTarget) {
imm.onWindowFocus(mView, mView.findFocus(),
mWindowAttributes.softInputMode,
!mHasHadWindowFocus, mWindowAttributes.flags);
}
// Clear the forward bit. We can just do this directly, since
// the window manager doesn't care about it.
mWindowAttributes.softInputMode &=
~WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
((WindowManager.LayoutParams)mView.getLayoutParams())
.softInputMode &=
~WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
mHasHadWindowFocus = true;
}
客户端进程的InputMethodManager发起启动输入法的过程:
frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java首先获取服务的对象的信息:
FocusInLocked() 获取当前服务对象:
void focusInLocked(View view) {if (DEBUG) Log.v(TAG, "focusIn: " + view);
if (mCurRootView != view.getRootView()) {
// This is a request from a window that isn't in the window with
// IME focus, so ignore it.
if (DEBUG) Log.v(TAG, "Not IME target window, ignoring");
return;
}
mNextServedView = view;
scheduleCheckFocusLocked(view);
}
- InputMethod Framework
- InputMethod剖析
- Android InputMethod 教程
- Java InputMethod 实现
- android.view.inputmethod
- how to debug inputmethod
- 【Android】【InputMethod】隐藏输入法
- mtk font inputmethod mtk输入法
- Android InputMethod 源码分析,显示输入法流程
- Android 中文api (81)——InputMethod [输入法]
- Qt 底层输入的截获InputMethod 方法的简单应用
- InputMethod窗口、wallpaper窗口管理关键函数分析
- framework
- Framework
- Framework
- FrameWork
- Framework
- FrameWork
- 优秀程序员的四十五个习惯
- GridView的PreRender事件解决
- hdu 1466 计算直线的交点数
- jQuery插件开发全解析
- 七夕--牛郎织女传说
- InputMethod Framework
- 老程序员十年生涯黯然总结
- [Visual C++系列] 2.5 使用各种映射方式
- Android自定义View以及layout属性全攻略
- ortp库使用入门
- 从今天起,停用校内,改用CSDN
- yammer
- 设计一个在UDP之上提供面向连接服务的可靠传输协议
- windows xp安装iis时卡在“正在安装internet信息服务”的解决方法