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

时间:2011-08-11 13:38:52

标签: android textbox keyboard webview hidden

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

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

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

2)但是在我的Android应用程序中,文本框将保持在同一个位置,并最终被我的键盘隐藏。因此,用户唯一的选择是输入“blind”。

我该如何解决这个问题?还有其他人遇到过这个问题吗?

8 个答案:

答案 0 :(得分:42)

这就是我解决问题的方法。正如Venky所说,你必须添加

android:windowSoftInputMode="adjustResize"

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

答案 1 :(得分:25)

我疯了,android:windowSoftInputMode="adjustResize"可能会有所帮助,但请确保您的应用无法全屏显示。

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

<item name="android:windowFullscreen">false</item>

答案 2 :(得分:3)

这样可行:

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

答案 3 :(得分:2)

在解决这个问题时我学到的东西很少--- 1.主题样式不应包含Fullscreen True 2.添加android:windowSoftInputMode =&#34; adjustResize&#34; 3.删除android:scrollbars =&#34; none&#34;是...... 干杯!

答案 4 :(得分:1)

就我而言,取得的成功是:

  1. 在下面添加清单,webview和片段:

    android:windowSoftInputMode="adjustResize"
    
  2. 使用NON FullScreen主题,如下所示:

    <style name="AppTheme" parent="android:Theme.Black.NoTitleBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowFullscreen">false</item>
    </style>
    
  3. 不在WebView上使用ScrollView。

答案 5 :(得分:0)

是的,在使用Webview时遇到同样的问题,我的是对模态的输入。 Textfield没有关注&#34;在键盘上方。 解决方案是延迟函数调用。希望有人发现这很有用。

   $("body").on("click", ".jstree-search-input", function () {  

    setTimeout(function(){ 
        androidScroll(); 
    }, 500);
    });

正如您所看到的,它用于jstree输入......

   function androidScroll() {
    // Webview focus call (pushes the modal over keyboard)
        $('.control-sidebar-open ').scrollTop($('.control-sidebar-open ')[0].scrollHeight);

}

答案 6 :(得分:0)

请注意除了建议的答案

android:windowSoftInputMode="adjustResize"

当您处于身临其境模式时,正在工作

答案 7 :(得分:0)

对于全屏模式下的活动,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);
                    }
                }
            }
        });
    }