安卓WebView使用总结

在项目中或多或少会用到网页加载,这就要使用WebView了。项目做多了就会发现,如果有一个通用的模板,做起来就会即省时、又省力,高高兴兴的。这篇文章要做的就是总结一下我过去所用到的一些关于WebView的东西,可能不是那么全面,毕竟是个人的见解嘛。
直接上代码:

第一步:xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ProgressBar
        android:id="@+id/progress"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="10dp"/>

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

第二部:网络权限

<uses-permission android:name="android.permission.INTERNET"/>

第三部:java代码

public class WebViewActivity extends AppCompatActivity {

    private ProgressBar progress;
    private WebView webView;
    private String url = "https://www.baidu.com";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);
        initViews();
        initWeb();
    }

    private void initWeb() {

        //加载本地资源
        // webView.loadUrl("file:///android_asset/demo.html");
        //加载web资源
        webView.loadUrl(url);
        //加载网页内容   body 网页内容
        //webView.loadData(body, "text/html; charset=UTF-8", null);

        WebSettings settings = webView.getSettings();
        // 让WebView能够执行javaScript
        settings.setJavaScriptEnabled(true);
        settings.setDefaultTextEncodingName("UTF-8");
        //让JavaScript可以自动打开windows
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        //优先使用缓存
//        settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        //不使用缓存
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
                return true;
            }
        });
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (newProgress == 100) {
                    // 网页加载完成
                    progress.setVisibility(View.INVISIBLE);
                } else {
                    // 加载中
                    if (View.INVISIBLE == progress.getVisibility()) {
                        progress.setVisibility(View.VISIBLE);
                    }
                    progress.setProgress(newProgress);
                }
                super.onProgressChanged(view, newProgress);

            }
        });
    }

    private void initViews() {
        progress = (ProgressBar) findViewById(R.id.progress);
        webView = (WebView) findViewById(R.id.webview);
    }

    //重写物理返回键
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (webView.canGoBack()) {
                webView.goBack();//返回上一页面
                return true;
            } else {
                finish();//退出
            }
        }
        return super.onKeyDown(keyCode, event);
    }
}

备注:
1、如果要调用js的方法,可以按下列操作。

webView.loadUrl(javascript:test('str')");

其中,test(‘str’)为js的方法,’str’为参数。

猜你喜欢

转载自blog.csdn.net/youngmy5/article/details/70256279