防止webView中的键盘弹出

10
我希望我的webView中不会因为某个操作而弹出软键盘。这是因为我有一个自定义的“键盘”,它由webView下方的按钮组成。但是,我不想完全禁用应用程序的键盘,因为我需要在不同的上下文中使用它。当用户点击webView内部的输入字段时,键盘不应该显示。我也不希望键盘出现后立即隐藏。
我目前在我的AndroidManifest.xml中已经有了这个:
android:windowSoftInputMode="stateAlwaysHidden"

我已经尝试禁用webView的聚焦,但是这样我也无法使用自定义"键盘"输入文本,因为webView的输入字段没有聚焦。

我也在onCreate中尝试过这个方法,但它没有起作用(键盘仍然会弹出):

View focusedView = this.getCurrentFocus();
if (focusedView == null)
    return;
InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager == null)
    return;
manager.hideSoftInputFromWindow(focusedView.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);

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

嗯,这在 android:windowSoftInputMode="stateHidden|stateAlwaysHidden" 中已经包含了,不是吗?但我也尝试过去掉 stateHidden,但软键盘仍然会弹出。 - MetaColon
将两者都设置可能会产生未定义的结果。你能试着清理并重新构建吗? - Sagar
仍然不起作用。 - MetaColon
哦,那很奇怪。请在您的问题中更新此信息,以便其他人可以回答并不推荐相同的选项。 - Sagar
还有一件事,你可以在 manager.hideSoftInputFromWindow(focusedView.getWindowToken(), 0); 中传递 InputMethodManager.HIDE_IMPLICIT_ONLY 而不是传递 0 - Sagar
显示剩余3条评论
4个回答

8
抱歉这么晚才回复。
以下是解决方案:
在您的父布局中添加以下内容:
android:descendantFocusability="blocksDescendants"

设置WebView的这两个属性:

android:focusable="false"
android:focusableInTouchMode="true"

这对我有效 :)

1
我本来以为我已经尝试过这个方法了。不管怎样,它似乎起作用了,谢谢!然而,一个小缺点是当前选定的文本框不再突出显示。因此,我不会把你的回答选为最佳答案,但如果没有其他解决方案,你将获得悬赏奖励。 - MetaColon
好的,谢谢您对此提供的反馈。与此同时,我会寻找一个解决方法,希望能够想出一个解决方案。 - Abdul Ahad

4

在您的WebView中使用此代码

 android:descendantFocusability="blocksDescendants"
 android:focusable="false"
 android:focusableInTouchMode="false"

试试这个

<WebView
    android:id="@+id/myWebView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="blocksDescendants"
    android:focusable="false"
    android:focusableInTouchMode="false" />

1
这似乎终于可行了,谢谢!我会再做一些测试,但你很可能会收到赏金。 - MetaColon
1
这也禁用了硬件键盘和向Webview发送按键事件。 - pmiguelpinto

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

在所有操作之前调用此函数


0
将以下代码粘贴到setContentView之后的onCreate方法中:

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

运行此活动时键盘不会显示。


就像我在问题中已经提到的那样,这不起作用。顺便说一句,这正是Mechadroids的答案。 - MetaColon
不起作用?自从我学习android以来一直在使用,现在出了问题。天哪。 - Kopi Bryant
我无法向您解释为什么这不起作用,但是键盘仍会弹出您的解决方案。 - MetaColon

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