点击键盘外部关闭键盘后,AdjustResize不起作用

6

我有一个 WebView(在 ViewPager 中的 Fragment 中的 SlidingTabLayout 中)。

当使用 WebView 输入文本时,我希望布局能够调整大小以确保输入可见。

当我点击 WebView 中的文本输入时,软键盘会出现并且布局会重新调整大小。我可以使用软键盘的返回按钮提交我的文本或取消输入。此后,键盘消失并且布局恢复原来的大小。这是正确的 AdjustResize 行为。

然而,当通过单击 Softkeyboard 外部(例如,在 Google 中输入查询并在 WebView 中按搜索按钮)来关闭键盘时,键盘会隐藏,并且布局需要大约 2-3 秒才能重新调整大小(在我的布局底部留下空白区域 2-3 秒)。之后,在选择文本输入时,键盘会覆盖 WebView(adjustPan)。

如何确保在通过按下 WebView 来关闭键盘时,仍保持adjustResize行为。

我已经尝试重新设置 AdjustResize(例如从 onTouch),但没有效果:

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

我也尝试了以下解决方案,但没有改变。
此外,我认为这可能不是一个焦点问题(因为键盘出现了,webview也有响应)。 我确实从我的View请求焦点:
    webView.setFocusable(true);
    webView.setFocusableInTouchMode(true);

我想创建一个新项目,复制并粘贴一些代码,然后在我的设备上查看你所面临的问题。你能做出修改以使这成为可能吗? - NecipAllef
@NecipAllef 我已经发布了一些文件。但是,如果您愿意,我可以发送给您我的完整项目。电子邮件(24小时):m95YZL4xu2Sc@meltmail.com - Mdlc
我看过你的WebView源代码,大约有1.2k行代码,我相信其中大部分甚至与你的问题无关。如果你能提供一些能让我们观察问题但又不难编译或调试的代码,你可以更快地得到帮助。因此,我建议你创建一个示例项目并分享它。我相信这是通过Github实现的。 - NecipAllef
@NecipAllef 是的,我会处理这个问题。但我仍需确定问题的原因,所以需要一些时间来创建这个项目。 - Mdlc
1个回答

0

事实证明,当您对WebView执行布局翻译或者WebView的布局间接改变(例如,在RelativeLayout中调整WebView上方的元素大小,导致WeView也被调整大小)时,显示和隐藏键盘可能会导致一些奇怪的行为:

  • AdjustResize行为可能会丢失(如问题所示)
  • 键盘后WebView调整大小可能需要比正常情况下更长的时间。
  • WebView的性能降低

对我而言解决这个问题的方法是以任何方式防止WebView中的布局更改(旋转时重新加载布局似乎不会导致此问题)。在我的情况下,我正在显示和隐藏工具栏,导致WebView调整大小(并填充屏幕)。


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