У меня есть приложение с этой актуальной декларацией:
compileSdkVersion 29
buildToolsVersion '29.0.2'
useLibrary 'org.apache.http.legacy'
defaultConfig {
minSdkVersion 19
targetSdkVersion 29
...
А также у меня есть несколько WebView
s в приложении - полноразмерная версия 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
- так называемого Trichrome , но все еще не представляю, связано ли это - у меня нет специального журнала / вывода слюбая подсказка и проблема присутствует от 5.0 до 10, на них я использую LAYER_TYPE_HARDWARE