我有一个活动,在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,就在键盘的正上方。它属于哪里。