WebView 加载富文本内容

under Android  tag     Published on June 23rd , 2021 at 02:46 pm

WebView 加载数据的方法:

webView.loadUrl("https://www.baidu.com/"); // 通过网址加载网页
webView.loadDataWithBaseURL(null, content,  "text/html" , "utf-8", null); // 通过富文本加载网页

webView.loadUrl();

需要联网使用,并且其中的 url 可能是 http,需要在 AndroidManifest.xml 中添加:

<manifest>
    <!--  联网权限  -->
    <uses-permission android:name="android.permission.INTERNET"/>
    
    <application 
        // ...
        android:usesCleartextTraffic="true">
        // ...
    </application>
</manifest>

使用
在 WebView 中加载在线网址,必须重写 WebViewClient

webView.loadUrl("https://www.baidu.com/");
webView.setWebViewClient(new WebViewClient());

Screenshot_20210627_154653_com.example.surface.jpg

webView.loadDataWithBaseURL();

加载富文本内容,使用富文本可以更改富文本中的内容,将其显示。更好的显示富文本内容可以使用 WebSetting。content 是富文本,直接复制网页代码拿到的,需要把 \t \n 等删除

WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true); // 设置 webView 支持 JavaScript
settings.setUseWideViewPort(true); // 支持自动适配
webView.loadDataWithBaseURL(null, content, "text/html", "utf-8", null);

Screenshot_20210627_154441_com.example.surface.jpg


WebViewClient 中常用的监听事件

现实中我们加载数据可能有更多的需求,WebViewClient 中有很多监听事件,利用起来就能完成很多需求。

/**
 * 在开始加载网页时会回调
 */
public void onPageStarted(WebView view, String url, Bitmap favicon) 
/**
 * 在结束加载网页时会回调
 */
public void onPageFinished(WebView view, String url)
/**
 * 拦截 url 跳转,在里边添加点击链接跳转或者操作
 */
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
/**
 * 加载错误的时候会回调,在其中可做错误处理,比如再请求加载一次,或者提示404的错误页面
 */
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)

onPageStarted()、onPageFinished()

监听网络加载进度。(懒了...)可以使用进度条

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        Toast.makeText(WebViewActivity.this, "开始", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        Toast.makeText(WebViewActivity.this, "结束", Toast.LENGTH_SHORT).show();
    }
});

shouldOverrideUrlLoading()

返回布尔值,默认 return false,继续加载 url,如果 return true,则 WebView 不会加载这个 url。WebResourceRequest 获取 url 相关信息(获取与请求关联的方法,例如“GET”; 获取为其发出资源请求的 URL等)

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

onReceivedError()

加载错误的时候会产生这个回调,在其中可做错误处理,比如加载一个错误提示页面。WebResourceError 获取错误信息(获取描述错误的字符串;获取错误的错误代码)

@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
    super.onReceivedError(view, request, error);
    webView.loadUrl("https://surface.iton.pw/");
}

参考文章:
Android WebView 加载富文本内容
WebViewClient 与常用事件监听
请求 HTTP 和 HTTPS


本文由 surface 创作,采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:September 29th , 2021 at 04:37 pm
分享到:Twitter  Weibo  Facebook