【发布时间】:2020-01-23 11:31:59
【问题描述】:
我有一个带有最新声明的应用:
compileSdkVersion 29
buildToolsVersion '29.0.2'
useLibrary 'org.apache.http.legacy'
defaultConfig {
minSdkVersion 19
targetSdkVersion 29
...
而且我在应用程序中几乎没有WebViews - 全尺寸Activity、Fragment 版本以及一个固定尺寸的广告(比如说300x300dp,水平居中)View 放置在带有原生小部件的列表中.最后一个在目标更新后不再加载(只有这个,所有其他都在工作),但是当我在线更改(恢复)时:
targetSdkVersion 28
它与更新前一样工作。此广告的整个 WebView 设置如下所示:
webView = findViewById(R.id.ad_banner_webview);
webView.setLayerType(Build.VERSION.SDK_INT <= 19 ?
WebView.LAYER_TYPE_SOFTWARE : // on older devices non-fullactivity webview is blinking/glitching
WebView.LAYER_TYPE_HARDWARE, null);
webView.setBackgroundColor(Color.TRANSPARENT);
final String userAgent = AppInfo.getInstance(webView.getContext()).getUserAgent();
webView.getSettings().setUserAgentString(userAgent);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setTextZoom(100);
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new CustomWebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (!isDummy)
webViewContainer.setTag(System.currentTimeMillis());
}
});
//disabling long touch - text not selectable
webView.setOnLongClickListener(v -> true);
webView.setLongClickable(false);
webView.setHapticFeedbackEnabled(false);
请注意,在 API 19(支持的最低版本)上,webView 调用了 setLayerType(WebView.LAYER_TYPE_SOFTWARE) 并且始终在工作,无论定位如何...
问题很简单:这种行为的原因是什么以及如何解决这个问题?
我正在查看 DOCs 在目标更新后可能会改变我的应用行为的内容,但没有关于 WebView 的消息。我还发现了一些关于WebView - so-called Trichrome 渲染变化的隐藏信息,但仍然不知道它是否相关 - 我没有任何特殊的日志/输出有任何线索和问题来自5.0 到 10,在这些我使用 LAYER_TYPE_HARDWARE
【问题讨论】:
标签: android webview android-10.0