Android WebView 滚动不流畅并跳转/有回调
Posted
技术标签:
【中文标题】Android WebView 滚动不流畅并跳转/有回调【英文标题】:Android WebView scroll is not smooth and jumps / have pullbacks 【发布时间】:2019-12-19 18:11:40 【问题描述】:在 Pixel 3 和 android Pie 上测试我的应用时,我发现我的应用中的 Webview 出现奇怪的滚动行为,向下或向上滚动时,滚动根本不流畅,有时会跳回原来的位置或完全跳到顶部或底部。
当我向上或向下滑动(拖动然后放开)时会发生这种情况
这里是问题的快速浏览(我试图向下滚动): https://imgur.com/a/8acgfCx
向下滚动时,它移动得很慢,它移动得很少,然后滚动到最后自己跳到顶部一点。
这是一个扩展版本,当滚动即将停止然后稍微跳跃时,跳跃(随机)发生。 https://imgur.com/a/K0N0utK
我正在使用 LG 手机和华为手机-真实设备-(棉花糖和牛轧糖)测试我的应用,在这些设备中都没有任何问题。
在模拟器上,我使用 Android API 23 (M) 测试了 Nexus 5,没有遇到任何问题。但是将 Nexus 5 上的操作系统更改为 Android Oreo,也发现了滚动问题。
我以为问题出在 Android Oreo+... 但后来我在带有 Android 23 (M) 的模拟器 Pixel 3 上进行了测试,并且遇到了同样的滚动问题。所以也许设备有问题,但安卓版本也有。
我尝试像这样更改图层类型:
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null)
但没有任何作用。 Manifest 中的“hardwareAccelerated”标签为真。
webview 的设置非常简单:
<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_
android:layout_
tools:context=".destinations.common.WebViewDestFragment" android:id="@+id/root_layout">
<WebView
android:id="@+id/webView"
android:layout_
android:layout_
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:layout_ 更改为 android:layout_?也与 android:layout_height 相同 谢谢回复,刚试了下,同样的问题,你觉得ConstraintLayout有什么问题吗?我会尝试使用 LinearLayout。 我在这篇文章中添加了一个答案。希望对你有帮助 【参考方案1】:试着像这样改变你的布局
<?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_
android:layout_
tools:context=".HomeActivity">
<WebView
android:id="@+id/webview"
android:layout_
android:layout_
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);
【讨论】:
很遗憾,感谢您的回答.. 同样的问题,我注意到有时它滚动得很好,然后又滚动得很慢。我将尝试一个仅包含 webview 的全新项目并使用此答案,以确保当前问题与当前项目中的某些内容无关。 我发现你将它导入到另一个布局中的某个地方,它是一个片段?因为这是在您的代码工具中实现的:context=".destinations.common.WebViewDestFragment" 也许它有时会导致您的滚动错误。 我尝试了一个全新的项目(没有片段或任何东西,只有 MainActivity),我只是添加了一个具有互联网权限的 webview,并添加了这个答案中提供的设置,同样的问题。我在模拟器上使用 Pixel 3 API 24、25 和 26 进行了测试,在所有这些 API 中都有相同的奇怪行为,还有 Nexus 6 API 24 和相同的问题,但是......尝试了 Nexus 5 API 24,并且滚动按预期工作。所以我开始相信这是一个硬件问题.. 尝试在 AndroidManifest 中添加这个 android:supportsRtl="true" android:hardwareAccelerated="true" android:usesCleartextTraffic="true" 好的,很高兴听到这个消息。希望我对你有所帮助。编码愉快!以上是关于Android WebView 滚动不流畅并跳转/有回调的主要内容,如果未能解决你的问题,请参考以下文章
为表单字段显示软键盘时,Android 4.3 Webview 不滚动
Android WebView - 滚动条不填充 layout_height