web-dev-qa-db-fra.com

Exemple d'utilisation de WebViewCompat

Par accident, j'ai trouvé qu'il existe une bibliothèque de support pour WebView qui fait partie d'AndroidX: androidx.webkit: webkit: 1.0.0

Cependant, je n'ai pas pu trouver d'exemple de code sur la façon de l'utiliser et le JavaDoc n'est pas d'une grande aide non plus: https://developer.Android.com/reference/androidx/webkit/package-summary

Est-ce censé être utilisé par les développeurs ou s'agit-il d'une bibliothèque interne?

14
TomTasche

Cette bibliothèque est une abstraction androidx pour WebKit (car elle repose sur un fichier APK pouvant être mis à jour).

WebViewCompat.Java lui-même dit "ne pas instancier cela" (et la balise XML est également inconnue, il faut donc utiliser Android.webkit.WebView); mais la classe WebViewCompat a plusieurs public static méthodes, qui sont accessibles; Aussi WebViewFeature semble pertinent (le IDE s'est plaint).

Lorsque vous utilisez ces importations:

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;

l'utilisation de WebViewClientCompat fonctionne comme ceci:

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);
        }
    });
}

implémenter interfaceWebViewCompat.VisualStateCallback fonctionne de la même manière:

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);
            }
        }
    });
}
3
Martin Zeitler