Пример использования WebViewCompat

Случайно я обнаружил, что есть библиотека поддержки для WebView, которая является частью AndroidX: androidx.webkit: webkit: 1.0.0

Однако я не смог найти образец кода о том, как его использовать, и JavaDoc тоже не очень помогает: https://developer.android.com/reference/androidx/webkit/package-summary

Предполагается, что это будет использоваться разработчиками или это внутренняя библиотека?

Я тоже не знаю, но думаю, что он обеспечивает согласованную реализацию javascript на всех платформах.

Ben P. 11.10.2018 18:56

Нашел видео с Android Dev Summit 2018, объясняющее новый WebViewCompat внутри Android X: youtube.com/watch?v=HGZYtDZhOEQ Но оно не содержит полезных примеров кода: :(

Christian D 24.01.2019 16:39
18
2
5 646
1

Ответы 1

Эта библиотека является абстракцией androidx для WebKit (поскольку она полагается на APK с возможностью обновления).

Сам WebViewCompat.java говорит «не создавать этого экземпляра» (а также тег XML неизвестен, поэтому нужно использовать android.webkit.WebView); но класс WebViewCompat имеет несколько доступных методов public static; Также WebView кажется актуальным (IDE жаловалась).

При использовании этого импорта:

import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;

import androidx.annotation.NonNull;

import androidx.webkit.SafeBrowsingResponseCompat;
import androidx.webkit.WebResourceErrorCompat;
import androidx.webkit.WebViewClientCompat;
import androidx.webkit.WebViewFeature;
import androidx.webkit.WebViewCompat;

использование WebViewClientCompat работает примерно так:

private WebView mWebView;

...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    this.mWebView.setWebViewClient(new WebViewClientCompat(){

        @Override
        public void onPageCommitVisible(@NonNull WebView view, @NonNull String url) {
            super.onPageCommitVisible(view, url);
        }

        @Override
        public void onReceivedError(@NonNull WebView view, @NonNull WebResourceRequest request, @NonNull WebResourceErrorCompat error) {
            super.onReceivedError(view, request, error);
        }

        @Override
        public void onReceivedHttpError(@NonNull WebView view, @NonNull WebResourceRequest request, @NonNull WebResourceResponse errorResponse) {
            super.onReceivedHttpError(view, request, errorResponse);
        }

        @Override
        public void onSafeBrowsingHit(@NonNull WebView view, @NonNull WebResourceRequest request, int threatType, @NonNull SafeBrowsingResponseCompat callback) {
            super.onSafeBrowsingHit(view, request, threatType, callback);
        }

        @Override
        public boolean shouldOverrideUrlLoading(@NonNull WebView view, @NonNull WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
        }
    });
}

реализация interfaceWebViewCompat.VisualStateCallback работает примерно так:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && WebViewFeature.isFeatureSupported(WebViewFeature.VISUAL_STATE_CALLBACK)) {
    final int mVisualStateCallbackId = 500;
    WebViewCompat.postVisualStateCallback(mWebView, mVisualStateCallbackId, new WebViewCompat.VisualStateCallback() {
        @Override
        public void onComplete(long requestId) {
            if (requestId == mVisualStateCallbackId) {
                mWebView.setVisibility(View.VISIBLE);
            }
        }
    });
}

Знаете ли вы о преимуществах вышеупомянутого?

TomTasche 16.07.2019 15:32

@TomTasche, как указано: it relies on an update-able APK, а не реализация WebKit фреймворка. имя Compat почти всегда означает, что это абстракция ... и поэтому методы interface выглядят совершенно одинаково, но используемый движок может быть другим.

Martin Zeitler 16.07.2019 17:37
WebViewFeature.isFeatureSupported() также дает подсказки для различных реализаций ...
Martin Zeitler 16.07.2019 17:42

ну, перенос на WebViewCompat, кажется, был пустой тратой времени.

lasec0203 02.09.2020 09:35

Другие вопросы по теме