android 的软件盘

关闭软件盘:

Kotlin 复制代码
 public static void hideKeyboard(Context context, View v) {
        if (context == null) {
            return;
        }
        if (v != null && v.getWindowToken() != null) {
            InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            im.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
    }

打开软件盘:

Kotlin 复制代码
    public static void openKeybord(EditText mEditText, Context mContext) {
        if (mContext == null || mEditText == null) {
            return;
        }
        InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
    }

hideSoftInputFromWindow和showSoftInput和toggleSoftInput区别

这三个方法都是 InputMethodManager 提供的,用于控制 Android 的软键盘(输入法)。它们的作用分别是:

🧩 方法区别一览

方法 作用 典型用途 是否需要 View
hideSoftInputFromWindow(token, flags) 关闭软键盘 用户点击空白区域等情况 ✅ 需要 window token
showSoftInput(view, flags) 显示软键盘 用户点击输入框后手动弹出 ✅ 需要目标 View
toggleSoftInput(showFlags, hideFlags)

🔍 详细说明

1. hideSoftInputFromWindow(windowToken, flags)

关闭当前窗口的软键盘。

Kotlin 复制代码
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
  • 参数解释:

    • windowToken: 通常来自当前焦点 view 的 getWindowToken()。

    • flags: 通常传 0,也可用 HIDE_NOT_ALWAYS 等。

  • 特点:

    • 你需要明确知道是哪个窗口(通过 view);

    • 适合"点击空白区域关闭键盘"等场景。

2. showSoftInput(view, flags)

主动为指定的 View 显示软键盘(一般是 EditText)。

Kotlin 复制代码
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT)
  • 参数解释:

    • view: 你希望键盘出现在哪个输入控件上。

    • flags: 一般用 SHOW_IMPLICIT、SHOW_FORCED。

  • 特点:

    • 需要目标 view 已经 requestFocus();

    • 如果 view 还没 attach,可能失败。

3. toggleSoftInput(showFlags, hideFlags)

切换软键盘的显示状态。如果当前是显示状态,就关闭;如果是关闭状态,就打开。

Kotlin 复制代码
imm.toggleSoftInput(0, 0)
  • 参数解释:

    • showFlags: 比如 SHOW_FORCED;

    • hideFlags: 比如 HIDE_NOT_ALWAYS;

    • 通常两个都传 0。

  • 特点:

    • 不需要传 View;

    • 不保证显示的是哪个 View 的输入;

    • 多用于"快捷开关"或"无焦点界面"的情况。

view.getWindowToken()是什么?为什么必须传?

getWindowToken() 是 Android 中 View 类的一个方法,它返回一个 IBinder 对象,表示这个 View 所附着的 窗口的令牌(token)。

getWindowToken() 表示这个 View 当前所在的 窗口标识,用于系统识别这个 View 属于哪个窗口。

📦 举个比喻:

想象你有多个 Activity 或 Dialog,它们都可能打开键盘。getWindowToken() 就像是给你一个"窗口的身份证",告诉系统:

"我要关闭键盘,这个 View 所在的窗口就是目标。"

相关推荐
longxibo6 小时前
【AIBIZ低代码平台:能长出业务系统的平台】
android·低代码·rxjava
AI_Gump14 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
疯华整猫20 小时前
否决 Flutter 提案那天,我发现自己也说不清 Framework 管什么
android
传奇开心果编程1 天前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
慕容雪_1 天前
Capacitor8-Android打包完整手册
android·打包·capacitor
阿杰m2 天前
Android源码第十三章:Bluetooth——沿一次发现走到控制器
android
booboosui2 天前
派活给另一个 AI:前后两次文件夹快照,就是交付清单
android
普通人62 天前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql
好的佩奇2 天前
Dart 之集合元素
android·flutter·dart
Easyhood2 天前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose