WebView 的基本使用

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/zeqiao/article/details/84372705

要搞混合开发,之前零零碎碎也做过 WebView + JS交互,但是现在要加入混合开发的正规军行列,那么就得认真些,比如,从 WebView 加载一个网页开始 ~

必须的:

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

加载网站:

mWebView = (WebView) findViewById(R.id.wv_test);
mWebView.loadUrl("https://www.baidu.com");

咦,什么都没有:

setJavaScriptEnabled(true) 后:

WebSettings settings = mWebView.getSettings();
// 现在很多网站都用到 JS,要设置为 true才能正确加载网站内容
settings.setJavaScriptEnabled(true);

点击某个网址时提示用系统浏览器打开,怎么办:

了解一下重定向呗:

        shouldOverrideUrlLoading 此方法用于此重定向,当用户点击此 mWebView 中的链接时:
        1、如果没有此方法,系统会调用系统自带的浏览器打开所点击的链接;
        2、如果加了此方法并使用了 mWebView.loadUrl(url),表示在此 mWebView 中打开所点击的链接。
        
        shouldOverrideUrlLoading 返回值:
        1、return true;    表示由开发者自行处理此次点击行为(比如打开某个 Activity)
        2、return false;   表示由此 WebView 处理此次点击行为
            if (isXxxURL(url)) {
                openXxxActivity();
                return  true;
            }
            return false;
// 链接点击重定向
mWebView.setWebViewClient(new WebViewClient() {
    // 21之后用 shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        mWebView.loadUrl(url);
        return super.shouldOverrideUrlLoading(view, url);
        /*
        shouldOverrideUrlLoading 此方法用于此重定向,当用户点击此 mWebView 中的链接时:
        1、如果没有此方法,系统会调用系统自带的浏览器打开所点击的链接;
        2、如果加了此方法并使用了 mWebView.loadUrl(url),表示在此 mWebView 中打开所点击的链接。
        shouldOverrideUrlLoading 返回值:
        1、return true;    表示由开发者自行处理此次点击行为(比如打开某个 Activity)
        2、return false;   表示由此 WebView 处理此次点击行为
            if (isXxxURL(url)) {
                openXxxActivity();
                return  true;
            }
            return false;
        */
    }
});

进入某个网站的十八层页面后,一点击回退就退出当前 Activity,怎么办呢:

@Override
public void onBackPressed() {
    // 如果可以回退就回退到上一页,而不是退出当前 Activity
    if (mWebView.canGoBack()) {
        mWebView.goBack();
    } else {
        // 默认回退处理方式
        super.onBackPressed();
    }
}

所有代码:

public class TestActivity extends AppCompatActivity {

    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        setContentView(R.layout.activity_test);
        initWebView();
    }

    @SuppressLint("SetJavaScriptEnabled")
    private void initWebView() {
        mWebView = (WebView) findViewById(R.id.wv_test);
        WebSettings settings = mWebView.getSettings();
        // 现在很多网站都用到 JS,要设置为 true才能正确加载网站内容
        settings.setJavaScriptEnabled(true);
        mWebView.loadUrl("https://www.baidu.com");
        // 链接点击重定向
        mWebView.setWebViewClient(new WebViewClient() {
            // 21之后用 shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                mWebView.loadUrl(url);
                return super.shouldOverrideUrlLoading(view, url);
                /*
                shouldOverrideUrlLoading 此方法用于此重定向,当用户点击此 mWebView 中的链接时:
                1、如果没有此方法,系统会调用系统自带的浏览器打开所点击的链接;
                2、如果加了此方法并使用了 mWebView.loadUrl(url),表示在此 mWebView 中打开所点击的链接。

                shouldOverrideUrlLoading 返回值:
                1、return true;    表示由开发者自行处理此次点击行为(比如打开某个 Activity)
                2、return false;   表示由此 WebView 处理此次点击行为
                    if (isXxxURL(url)) {
                        openXxxActivity();
                        return  true;
                    }
                    return false;
                */
            }
        });
    }

    @Override
    public void onBackPressed() {
        // 如果可以回退就回退到上一页,而不是退出当前 Activity
        if (mWebView.canGoBack()) {
            mWebView.goBack();
        } else {
            // 默认回退处理方式
            super.onBackPressed();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/zeqiao/article/details/84372705