android - WebViewCompat 的示例用法
问题描述
偶然我发现有一个 WebView 支持库,它是 AndroidX 的一部分:androidx.webkit:webkit:1.0.0
但是我找不到任何关于如何使用它的示例代码,JavaDoc 也没有多大帮助:https ://developer.android.com/reference/androidx/webkit/package-summary
这应该由开发人员使用还是内部库?
解决方案
这个库是一个androidx
抽象WebKit
(因为它依赖于可更新的 APK)。
WebViewCompat.java本身告诉“不要实例化这个”(而且 XML 标签是未知的,所以必须使用android.webkit.WebView
);但是WebViewCompat类有几个public static
方法,可以访问;WebViewFeature 也似乎相关(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);
}
});
}
实现interface
WebViewCompat.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);
}
}
});
}
推荐阅读
- javascript - 如果值已存在于 Javascript 集中,如何删除它
- php - 将 foreach 循环之外的数组值动态加载到电子邮件中
- python - 无法让我的图表使用来自 mongoDB 的数据
- android - 我有一个膨胀类 android.support.design.widget.BottomNavigationView 错误。有什么想法吗?
- javascript - 应该如何声明一个空的时间戳变量,以便成为一个全局变量,以便我们稍后给它一个值?
- java - Jaxb2-maven-plugin 错误 java11 schema_reference
- amazon-web-services - 如何将 AWS 聊天机器人集成到网站中?
- c++ - 将 shared_ptr 与 CArray 一起使用?
- excel - 无限循环用文本替换空格
- angular - 禁用菜单导航项