问答中心分类: ANDROID如何以编程方式关闭/隐藏 Android 软键盘?
0
Ak23 提问 3天 前

我有一个EditText和一个Button在我的布局中。
在编辑字段中写入并单击Button,我想在键盘外触摸时隐藏虚拟键盘。我假设这是一段简单的代码,但我在哪里可以找到它的示例?

AlikElzin-kilaka 回复 3天 前

如果您只有一个 EditText 和几个按钮,比如复选框和单选框,该怎么办?唯一需要键盘的地方是单个 EditText。您如何注册才能知道选择/单击了其他内容以隐藏键盘?

AlikElzin-kilaka 回复 3天 前

我觉得我好笨。我无法隐藏 ICS 上的键盘。在这里尝试了所有方法以及它们的组合。没门。显示它的方法有效,但无论是什么windw令牌,隐藏标志,清单设置或任何圣徒的蜡烛,我都无法隐藏它。在键盘显示我总是看到这个: I/LatinIME(396): InputType.TYPE_NULL is specified W/LatinIME(396): Unexpected input class: inputType=0x00000000 imeOptions=0x00000000

AlikElzin-kilaka 回复 3天 前

/** * 该方法用于隐藏软键盘。 * @param activity */ public void hideSoftKeyboard(Activity activity) { InputMethodManager inputMethodManager = (InputMethodManager)activity.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); }

AlikElzin-kilaka 回复 3天 前

this为我工作

AlikElzin-kilaka 回复 3天 前

需要使用带有 INPUT_METHOD_SERVICE 的 InputMethodManager 来处理软键盘,例如readyandroid.wordpress.com/show-hide-android-soft-keyboard

AlikElzin-kilaka 回复 3天 前

你是认真的吗?如果您愿意,不能在任何时候简单地隐藏键盘吗?如果您有很多按钮、文本或大屏幕,要求 Android 隐藏键盘必须是一条指令,这并不重要:S

29 Answers
0
Reto Meier 回答 3天 前

您可以强制 Android 使用输入法管理器, 调用hideSoftInputFromWindow,传入包含焦点视图的窗口的标记。

// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

这将强制键盘在所有情况下都被隐藏。在某些情况下,您会想要传入InputMethodManager.HIDE_IMPLICIT_ONLY作为第二个参数,以确保仅在用户没有明确强制它出现时(通过按住菜单)隐藏键盘。
笔记:如果您想在 Kotlin 中执行此操作,请使用:context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
Kotlin 语法

// Only runs if there is a view that is currently focused
this.currentFocus?.let { view ->
    val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
    imm?.hideSoftInputFromWindow(view.windowToken, 0)
}
capo11 回复 3天 前

现在getSystemService()需要一个Context和一个服务类Class.对于我可以调用的上下文requiredContext但是对于 serviceClass 呢?

Windgate 回复 3天 前

@capo11 我尝试使用 Application.Context.getSystemService(),所以我不需要 serviceClass,但它不起作用

Captain Jack Sparrow 回复 3天 前

在里面很适合我Fragment使用getActivity().getSystemService()...

0
Garnet Ulrich 回答 3天 前

对隐藏软键盘也很有用的是:

getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
);

这可用于抑制软键盘,直到用户实际触摸 editText 视图。

Brian M 回复 3天 前

这是 2020 年唯一有效的。我在主要活动上有一个编辑文本,不希望在启动应用程序时出现键盘。

0
Saurabh Pareek 回答 3天 前

我还有另一种隐藏键盘的解决方案:

InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

这里通过HIDE_IMPLICIT_ONLY在的位置showFlag0在的位置hiddenFlag.它将强制关闭软键盘。

Alex 回复 3天 前

您在 showflags 参数中使用了隐藏标志。这仅适用于常量使用相同的整数。使用正确标志的示例

user529543 回复 3天 前

在 Android 4.0 上测试,我喜欢这个解决方案,因为我有多个编辑文本,该活动上的按钮,可以有焦点

Basilio German 回复 3天 前

这对我有用,我没有任何文本框或任何真正有焦点的东西。

Sver 回复 3天 前

@Mark:因为该方法称为“toggleSoftInput”,而不是“hideSoftInput” 🙂

Rohaitas Tanoli 回复 3天 前

这不能正常工作。它有时会显示键盘。

0
mckoss 回答 3天 前

Meier 的解决方案也适用于我。就我而言,我的应用程序的顶层是选项卡主机,我想在切换选项卡时隐藏关键字 – 我从选项卡主机视图中获取窗口令牌。

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    public void onTabChanged(String tabId) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(tabHost.getApplicationWindowToken(), 0);
    }
}
Azurespot 回复 3天 前

我也让它与 SearchView 一起工作。我的答案见下文。谢谢麦考斯!

Moeez 回复 3天 前

你好,我添加了一个新的问题关于android应用程序开发你能看到吗?

0
Jeyavel 回答 3天 前

请尝试以下代码onCreate()

EditText edtView = (EditText) findViewById(R.id.editTextConvertValue);
edtView.setInputType(InputType.TYPE_NULL);
Spike Williams 回复 3天 前

此方法可作为解决 2.0 和 2.1 中“无法隐藏软键盘”错误的一种方法,如中所述code.google.com/p/android/issues/detail?id=7115…当我尝试时,上面列出的 hideSoftInputFromWindow 方法不起作用,但 editView.setInputType(0) 起作用了。

Bostone 回复 3天 前

这是每个 Javadoc 合法的(不是 hack),尽管我会将方法重写为editView.setInputType(InputType.TYPE_NULL);

Tirtha 回复 3天 前

这可行,但是,它隐藏了 android:hint。我使用的是安卓 1.5

I'm_With_Stupid 回复 3天 前

当您需要从对话框关闭键盘时,这非常有用,不需要获取实例或任何东西,并且可以在用户按下关闭对话框的按钮时将其分配给所有编辑文本

Stefan Brendle 回复 3天 前

它有效,但它也隐藏了光标。我需要光标,但没有系统键盘。