## Android InputMethodManager: 管理 Android 输入法### 简介`InputMethodManager` 是 Android 系统服务,用于管理输入法编辑器 (IME) 的交互。开发者可以使用它来控制软键盘的显示和隐藏,以及处理 IME 及其与应用程序 UI 之间的复杂交互。### 主要功能#### 1. 显示和隐藏软键盘
showSoftInput(View view, int flags):
显示指定 View 的软键盘。
`view`: 请求显示软键盘的 View,通常是获取了焦点的 EditText。
`flags`: 可选参数,用于控制软键盘的显示方式,例如 `SHOW_IMPLICIT` 和 `SHOW_FORCED`。
hideSoftInputFromWindow(IBinder windowToken, int flags):
隐藏指定窗口的软键盘。
`windowToken`: 目标窗口的 token,可以通过 `View.getWindowToken()` 获取。
`flags`: 可选参数,用于控制软键盘的隐藏方式。#### 2. 处理 IME 可见性变化
OnGlobalLayoutListener:
监听布局变化,判断软键盘是否弹出。可以通过 `ViewTreeObserver` 注册此监听器,在 `onGlobalLayout()` 回调中获取软键盘的状态。#### 3. 与 IME 通信
getInputMethodWindowVisibleHeight():
获取 IME 窗口的可见高度。
restartInput(View view):
重启与指定 View 关联的 IME。
updateSelection(View view, int selStart, int selEnd, int candidatesStart, int candidatesEnd):
更新光标和候选词区域的选择范围。### 使用场景
处理软键盘遮挡输入框:
在软键盘弹出时调整布局,避免遮挡输入框。
实现自定义输入法:
与 IME 进行交互,例如获取输入内容、控制候选词列表等。
优化用户输入体验:
根据 IME 状态调整 UI 布局,例如显示/隐藏操作按钮等。### 代码示例
显示软键盘:
```kotlin val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT) ```
隐藏软键盘:
```kotlin val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(editText.windowToken, 0) ```
监听软键盘弹出:
```kotlin rootView.viewTreeObserver.addOnGlobalLayoutListener {val rect = Rect()rootView.getWindowVisibleDisplayFrame(rect)val screenHeight = rootView.rootView.heightval keyboardHeight = screenHeight - rect.bottomif (keyboardHeight > screenHeight
0.15) {// 软键盘已弹出} else {// 软键盘已隐藏} } ```### 注意事项
`InputMethodManager` 的 API 在不同 Android 版本中可能存在差异,建议参考官方文档并进行兼容性处理。
频繁调用 `showSoftInput()` 和 `hideSoftInputFromWindow()` 方法可能会影响性能,应尽量避免。### 总结`InputMethodManager` 是 Android 开发中处理输入法交互的重要工具,掌握其基本用法可以帮助开发者构建更友好、更易用的应用程序。