WebView不会关注输入字段

时间:2018-04-05 05:43:34

标签: android webview android-softkeyboard android-constraintlayout

我有一个活动,在ConstraintLayout中包含WebView和ImageView。 ImageView位于父级的右下角,WebView位于左上角。此外,WebView的底部连接到ImageView的顶部。

当在网站上点击输入字段(在WebView中加载)时,我可以看到活动已调整大小(如清单,样式和代码所示),因为ImageView已被移动并且位于键盘。但是,WebView不会改变。完全没有。输入字段保留在键盘UI下。沮丧正在扼杀我。我试图连续第三天解决这个问题。请帮我。

PS我还试图检测键盘何时打开和关闭并尝试调整WebView的大小,但是我做错了,或者方法在我的情况下不起作用。我通过订阅onGlobalLayout,然后计算屏幕高度与窗口高度来完成它,如果它们的比例符合某些要求,我会假设键盘已打开。这完美无瑕。问题是更新WebView的高度。我试图将高度更新为屏幕高度和键盘高度之间的差异。没有帮助。

activity_webview.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">


    <android.support.constraint.ConstraintLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context="au.com.strataplus.stratamanagement.WebViewActivity">

        <WebView
            android:id="@+id/webview_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:scrollbars="horizontal|vertical"
            android:windowSoftInputMode="stateVisible|adjustResize"
            app:layout_constraintBottom_toTopOf="@id/button_settings"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <com.makeramen.roundedimageview.RoundedImageView
            android:id="@+id/button_settings"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_marginBottom="16dp"
            android:layout_marginEnd="16dp"
            android:background="@android:color/transparent"
            android:onClick="onSettingsButtonClicked"
            android:scaleType="fitCenter"
            android:src="@drawable/ic_settings"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:riv_border_color="#333333"
            app:riv_border_width="0dip"
            app:riv_corner_radius="30dip"
            app:riv_mutate_background="true" />

        <ProgressBar
            android:id="@+id/progress_webview_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:visibility="visible" />
    </android.support.constraint.ConstraintLayout>
</layout>

WebViewActivity.java

public class WebViewActivity extends AppCompatActivity {
    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = DataBindingUtil.setContentView(this, R.layout.activity_web_view);
        binding.webviewContent.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                binding.progressWebviewContent.setVisibility(View.VISIBLE);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);

                binding.progressWebviewContent.setVisibility(View.GONE);
            }


            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (Utils.endsWith(url, documentSuffixes)) {
                    Intent intent = new Intent(getApplicationContext(), PDFViewActivity.class);
                    intent.putExtra(Constants.KEY_DOCUMENT_URL, url);
                    startActivity(intent);
                } else {
                    view.loadUrl(url);
                }

                return true;
            }
        });

        WebSettings settings = binding.webviewContent.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        settings.setLoadWithOverviewMode(true);
        settings.setUseWideViewPort(true);
        settings.setBuiltInZoomControls(true);
        settings.setDisplayZoomControls(false);
        settings.setSupportZoom(true);
        settings.setDefaultTextEncodingName("utf-8");

        binding.webviewContent.loadUrl(url);
    }
}

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">false</item>
    <item name="android:windowSoftInputMode">adjustResize</item>
    <item name="android:screenOrientation">portrait</item>
    <item name="android:windowActionBarOverlay">true</item>
</style>

在下面的屏幕截图中没有看到,名为password的输入字段位于键盘下方。设置按钮,我正在谈论的ImageView,就在键盘的正上方。它属于哪里。 screenshot

0 个答案:

没有答案