Android webview中隐藏在键盘下方的文本框

and*_*eas 54 keyboard hidden android textbox webview

我创建了一个简单的iPhone/Android应用程序,包含一个普通的webview.此webview调用我的网站.

在我的网站上有几种输入类型= text或textarea的表单.当它们位于页面底部时,我遇到了问题!

1)在我的iPhone应用程序中,键盘将自动出现并将文本框推送到手机屏幕的可见区域.所以没有什么可做的.

2)但是在我的Android应用程序中,文本框将保持在同一个位置,并最终被我的键盘隐藏.所以用户唯一的选择是输入"盲".

我怎样才能解决这个问题?有没有其他人遇到这个问题?

and*_*eas 47

这就是我解决问题的方法.正如Venky所说,你必须补充一下

android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)

到AndroidManifest.xml文件中的标记.但在我们的案例中,这还不够.确保你也可以使用你的观点,网页浏览等.然后我们终于让它工作了.

  • +1.这里的关键是将标记添加到所有视图. (5认同)
  • 嗨@andreas,试着按照你和Sandro的想法,所以我创建了`<style name ="StyleWindowSoftInputModeAdjustResize"> <item name ="android:windowSoftInputMode"> adjustResize </ item> <item name ="android:windowFullscreen"> false </ item> </ style>`并将其应用到我的webview`WebView webview = new WebView(this,null,R.style.StyleWindowSoftInputModeAdjustResize);`但是当我点击a中的某个输入框时,软键盘没有显示在WebView中加载的页面...我的WebView位于Horizo​​ntalScrollView内,它位于垂直ScrollView中. (3认同)
  • 请注意,如果你使用`windowFullscreen ="true"`或`android:theme ="某些包含windowFullScreen = true的样式"`,例如`android:theme ="@ android:style /,那么`windowSoftInputMode`将不起作用Theme.NoTitleBar.Fullscreen"`. (3认同)

San*_*dro 27

我疯android:windowSoftInputMode="adjustResize"了似乎任何工作可能没有帮助,但一定要让你的应用程序不全屏.

删除我的应用程序的全屏解决了布局调整大小与软键盘的问题.

<item name="android:windowFullscreen">false</item>
Run Code Online (Sandbox Code Playgroud)

  • 我需要我的应用程序是全屏 - 有没有办法让它全屏(即没有标题/警报栏)和键盘不覆盖字段? (6认同)
  • 我也有`android:theme ="@ android:style/Theme.NoTitleBar.Fullscreen"`这阻止了`adjustResize`工作.只使用`android:theme ="@ android:style/Theme.NoTitleBar"`make`setsetResize`工作. (5认同)
  • 是的我还需要我的应用程序全屏.你有解决方案吗? (2认同)

Siu*_*Fay 10

对于全屏模式的活动, android:windowSoftInputMode="adjustResize" 将不起作用。

https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN

全屏窗口将忽略窗口 softInputMode 字段的 SOFT_INPUT_ADJUST_RESIZE 值;窗口将保持全屏并且不会调整大小。

我在活动中使用以下方法通过设置底部填充来调整布局大小:


    public void adjustResizeOnGlobalLayout(@IdRes final int viewGroupId, final WebView webView) {
        final View decorView = getWindow().getDecorView();
        final ViewGroup viewGroup = (ViewGroup) findViewById(viewGroupId);

        decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
                Rect rect = new Rect();
                decorView.getWindowVisibleDisplayFrame(rect);
                int paddingBottom = displayMetrics.heightPixels - rect.bottom;

                if (viewGroup.getPaddingBottom() != paddingBottom) {
                    // showing/hiding the soft keyboard
                    viewGroup.setPadding(viewGroup.getPaddingLeft(), viewGroup.getPaddingTop(), viewGroup.getPaddingRight(), paddingBottom);
                } else {
                    // soft keyboard shown/hidden and padding changed
                    if (paddingBottom != 0) {
                        // soft keyboard shown, scroll active element into view in case it is blocked by the soft keyboard
                        webView.evaluateJavascript("if (document.activeElement) { document.activeElement.scrollIntoView({behavior: \"smooth\", block: \"center\", inline: \"nearest\"}); }", null);
                    }
                }
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)


小智 9

这会起作用:

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