Android WebView滚动不流畅并且跳跃/有回拉

问题描述 投票:0回答:2

在 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 问题吗?

android scroll android-webview smooth-scrolling bounce
2个回答
4
投票

尝试像这样改变你的布局

<?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);
    }

0
投票

将此行添加到 AndroidManifest.xml 内的 application

标签中
android:hardwareAccelerated="true"
© www.soinside.com 2019 - 2024. All rights reserved.