Android隐藏键盘无法正常工作 - 无法隐藏软键盘

17

我正在开发Droid Incredible手机(并已在1.5 AVD模拟器上测试),我的选项卡小部件中包含一个带有EditText和Send按钮的行,用于聊天功能。 我使用以下代码在单击“发送”后关闭软键盘,但它不起作用。 这与我在其他地方找到并获得赞同的代码完全相同。

有看到我漏掉了什么吗?

// in Button's onClick():
EditText chatTextBox = (EditText) findViewById(R.id.chat_entry);
// Handle button click ...
chatTextBox.setText("");

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(chatTextBox.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);

我还尝试将标志更改为0,但没有成功。有人知道出了什么问题吗?

****编辑****刚意识到我最初使用的是hideSoftInputFromInputMethod()而不是hideSoftInputFromWindow()。虽然更改了它,但并没有使它起作用...

5个回答

25

把 HIDE_IMPLICIT_ONLY 改成 0 就可以了(在我从 hideSoftInputFromInputMethod() 切换到 hideSoftInputFromWindow() 后)。

不过我不确定为什么 HIDE_IMPLICIT_ONLY 不起作用,因为我没有通过长按菜单键来显式打开键盘。


1
如果您使用标志“SHOW_FORCED”显示键盘,则表示用户已强制打开输入法(例如通过长按菜单),因此在用户明确关闭之前,不应将其关闭。请参阅文档 - AZ_
3
如果您已经强制显示了键盘并想要隐藏它,可以使用以下代码:InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); - AZ_

18

另一种防止在 AndroidManifest.xml 文件中活动的选项

android:windowSoftInputMode="stateAlwaysHidden" - 这种方法将防止键盘在活动加载时加载/显示。但是当您单击可编辑组件(如 edittext)时,键盘将会打开。 对于我的需求非常完美。

<activity
            android:name=".Name"
            android:label="@string/app_name" 
            android:windowSoftInputMode="stateAlwaysHidden">

这个在键盘不知何故永远不会死机的情况下是有效的。不错。 - beginners
我从activity...android:windowSoftInputMode="stateHidden"开始,这在我所有的测试设备上都有效,除了我的亚马逊Fire。 activity...android:windowSoftInputMode="stateAlwaysHidden" 在包括亚马逊Fire在内的所有设备上都有效。 - steven smith

14

1.首先将您的编辑文本令牌与键盘绑定并打开
inputMethodManager.showSoftInput(_edittext, 0); //这里_edittext是视图的实例

2.如果编辑文本从屏幕上隐藏,键盘会自动隐藏。

3.如果编辑文本仍然在屏幕上但想要隐藏键盘,则使用以下代码:imm.hideSoftInputFromWindow(_edittext.getWindowToken(), 0);//如果编辑文本不在屏幕上或未聚焦,此方法将无效。


1

这对我很有效:

fun FragmentActivity.openKeyboard(){
    val imm: InputMethodManager = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0) // do not use SHOW_FORCED here
}
fun FragmentActivity.hideKeyboard(view: View){ // send any view here, for instance page root view
    val imm: InputMethodManager = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(view.windowToken, 0)
}

0

试着在onResume/onCreate中实现:

rootView.requestFocus();

rootView是您的主视图。这将使焦点从EditText转移。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接