通过单击外部键盘关闭键盘后 AdjustResize 不起作用

AdjustResize does not work after dismissing keyboard by clicking outside keyboard

我有一个 WebView(在带有 SlidingTabLayout 的 ViewPager 中的片段中)。

使用 WebView 键入时,我希望调整布局大小以确保输入可见。

当我在 WebView 中单击文本输入时,会出现软键盘并且布局会调整大小。我可以使用软键盘的 return 按钮输入文本并提交,或者使用后退按钮取消输入。此后,键盘消失,布局重新调整大小。纠正 AdjustResize 行为。

但是,当通过在软键盘外部单击关闭键盘时(例如,在 Google 中输入查询并按下 WebView 中的“搜索”按钮时),键盘会隐藏,大约需要 2-3 秒要调整大小的布局(在布局底部留空 space 2-3 秒)。之后,选择textinput时,键盘覆盖WebView(adjustPan)。

如何确保在按下 WebView 关闭键盘时,adjustResize 行为得以保持。

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

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

我也试过 following solution 但这没有任何改变。

此外,我认为这可能不是焦点问题(因为键盘确实出现了,而且 webview 确实响应了)。我确实从我的观点中询问焦点:

    webView.setFocusable(true);
    webView.setFocusableInTouchMode(true);

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

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

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