在 Pixel 3 和 Android Pie 上测试我的应用程序时,我发现应用程序中的 Webview 出现奇怪的滚动行为,向下或向上滚动时,滚动根本不平滑,有时会跳回原来的位置或跳动完全到达顶部或底部。
当我向上或向下滑动(拖动并放开)时会发生这种情况
这是问题的快速浏览(我试图向下滚动): https://i.sstatic.net/MupYi.jpg
向下滚动时,它移动得非常慢,移动得很少,然后在最后,滚动条本身跳到了顶部。
这是一个扩展版本,当滚动即将停止然后稍微跳跃时,跳跃会发生(随机)。 https://i.sstatic.net/bY82h.jpg
我正在使用 LG 手机和华为手机 - 真实设备 - (棉花糖和牛轧糖)测试我的应用程序,在这些设备中没有任何问题。
在模拟器上,我使用 Android API 23 (M) 测试了 Nexus 5,没有任何问题。但将 Nexus 5 上的操作系统更改为 Android Oreo 后,也发现了滚动问题。
我以为问题是 Android Oreo+...但后来我在 Android 23 (M) 的模拟器 Pixel 3 上进行了测试,并遇到了相同的滚动问题。所以也许设备有问题,但 Android 版本也有问题。
我尝试像这样更改图层类型:
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null)
但没有任何效果。清单中的“hardwareAccelerated”标签为 true。
网络视图的设置非常简单:
<androidx.constraintlayout.widget.ConstraintLayout
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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".destinations.common.WebViewDestFragment" android:id="@+id/root_layout">
<WebView
android:id="@+id/webView"
android:layout_width="0dp"
android:layout_height="0dp"
android:overScrollMode="never"
android:scrollbars="vertical"
android:fadeScrollbars="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent">
</WebView>
</androidx.constraintlayout.widget.ConstraintLayout>
设置也非常基本:
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
webView.settings.databaseEnabled = true
webView.settings.cacheMode = LOAD_CACHE_ELSE_NETWORK
这可能是硬件或 Android API 问题吗?
尝试像这样改变你的布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HomeActivity">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:overScrollMode="never"/>
</android.support.constraint.ConstraintLayout>
并将其添加到您的 java 文件中
if (Build.VERSION.SDK_INT >= 21) {
webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
//FOR WEBPAGE SLOW UI
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webview.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
将此行添加到 AndroidManifest.xml 内的 application
标签中android:hardwareAccelerated="true"