Ориентация WebView 29 не показывает контент - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть приложение с этой актуальной декларацией:

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

...