美文网首页
WebView使用(一)--四种加载网页的方法

WebView使用(一)--四种加载网页的方法

作者: jeffrey12138 | 来源:发表于2020-08-11 16:35 被阅读0次

    其实这个控件相对来说说还是比较复杂的,但是学会之后,又会觉得其实也没有这么难,同时在学习的过程也会遇到不少的坑,让我觉得差点窒息,不过多亏各位书友发布的各种神技,我的问题也迎刃而解了,下面就是主要内容了:
    第一种加载方法:webView.LoadUrl(String url);

            //通过访问网络地址获取
            webView.loadUrl("http://www.baidu.com/");
            //通过手机SD卡获取(Environment.getExternalStorageDirectory().getPath()是获取手机SD卡根目录的,后面就是目录的地址)
            webView.loadUrl("file://"+ Environment.getExternalStorageDirectory().getPath()+"/1/index.heml");
            //通过项目本地资源获取
            webView.loadUrl("file:///android_asset/index.html");
            //访问本地html
            webView.loadUrl("http://192.168.252.164:8080");
            webView.setWebViewClient(new WebViewClient())
    

    第二种加载方法:loadUrl(String url,Map<String,String> additionalHttpHeaders);

         webView.loadUrl("http://192.168.252.164:8080");
         webView.setWebViewClient(new WebViewClient(){
                @Override
                public boolean shouldOverrideUrlLoading(android.webkit.WebView view, WebResourceRequest request) {
                    //通过map<>编写请求头的信心
                    Map<String,String> reqHeaders=new HashMap<>();
                    reqHeaders.put("android-webview-demo","testReqHeaders");
                    //通过下面这种方式把请求头信息写入
                    webView.loadUrl("http://192.168.252.164:8080",reqHeaders);
                    return super.shouldOverrideUrlLoading(view, request);
                }
            });
    

    这个在浏览器中做调试的话,需要增加下面代码:

    `if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                //此判断版本是否为android4.4以上,因为此方法是在android4.4版本之后出现的
                //此方法可以使webview可以在浏览器中进行调试
                webView.setWebContentsDebuggingEnabled(true);
            }
    

    当然,有编写的方法也会有测试的方法:
    调试的方法如下:
    1、使用浏览器打开chrome://inspect/#devices这个地址;
    2、打开浏览器后,使用模拟器或者真机测试的,都会看到下面这个内容,然后点进去

    image.png

    3、按照下面的点开就可以看到了哈


    image.png

    第三种加载方法:loadData(String data,String mimeType,String encoding)
    参数1:html代码的内容
    参数2:mimeTypr类型
    参数3:代码的编码类型
    这个就相对来说简单点:代码如下:

    public class WebView extends AppCompatActivity {
        private android.webkit.WebView webView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_web_view);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                //此判断版本是否为android4.4以上,因为此方法是在android4.4版本之后出现的
                //此方法可以使webview可以在浏览器中进行调试
                webView.setWebContentsDebuggingEnabled(true);
            }
    
            webView=findViewById(R.id.webView);
           /* //通过访问网络地址获取
            webView.loadUrl("http://www.baidu.com/");
            //通过手机SD卡获取(Environment.getExternalStorageDirectory().getPath()是获取手机SD卡根目录的,后面就是目录的地址)
            webView.loadUrl("file://"+ Environment.getExternalStorageDirectory().getPath()+"/1/index.heml");
            //通过项目本地资源获取
            webView.loadUrl("file:///android_asset/index.html");*/
            //访问本地html
           /* webView.loadUrl("http://192.168.252.164:8080");*/
            webView.loadData("<h1>Hello webView</h1>","text/html","utf-8");
    
    
            webView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(android.webkit.WebView view, String url) {
                    /*//通过map<>编写请求头的信心
                    Map<String,String> reqHeaders=new HashMap<>();
                    reqHeaders.put("android-webview-demo","testReqHeaders");
                    //通过下面这种方式把请求头信息写入
                    webView.loadUrl("http://192.168.252.164:8080",reqHeaders);*/
                    return super.shouldOverrideUrlLoading(view, url);
                }
            });
    
        }
    }
    

    第四种加载方式:loadDataWithBaseUrl(String baseUrl , String data,String mimeType,String encoding,String historyUrl);
    参数1:是指WebView会在加载baseUrl基础上运行;
    参数5:用于后退网页的作用;
    这里说到了涉及到控制网页的前进以及后退,顺便也详细说下:
    在这里涉及到7个使用方法:
    1、boolean canGoBack();可后退的方法;
    2、boolean canGoForward();可前进的方法;
    3、boolean canGoBackOrForward(int steps);可前进或后退的方法,参数是指后退或前进的页数,当参数为正数,表示前进,当参数为负数时,表示前进
    4、void goBack();立即后退的方法
    5、void gpForward();立即前进的方法
    6、void goBackOrForward(int steps);立即前进或者后退的方法,参数同上;
    7、void clearHistory();可以清空浏览记录,但是注意,执行这个方法后,以上6个方法就没有办法执行了,或者执行这个方法后,继续浏览;
    代码如下:

     //说明下哈,这里的7个方法,我都已经在布局中使用Button中的onCilck的属性关联起来了
        public void onCanGoBack(View view){
            Toast.makeText(this,String.valueOf(webView.canGoBack()),Toast.LENGTH_SHORT).show();
        }
        public void goBack(View view){
            webView.goBack();
        }
        public void onCanGoForward(View view){
            Toast.makeText(this,String.valueOf(webView.canGoForward()),Toast.LENGTH_SHORT).show();
        }
        public void goForward(View view){
            webView.goForward();
        }
        public void onCanGoBackOrForward(View view){
            int steps= Integer.valueOf(((EditText)findViewById(R.id.steps)).getText().toString());
            Toast.makeText(this,String.valueOf(webView.canGoBackOrForward(steps)),Toast.LENGTH_SHORT).show();
        }
        public void onGoBackOrForward(View view){
            int steps= Integer.valueOf(((EditText)findViewById(R.id.steps)).getText().toString());
            webView.goBackOrForward(steps);
        }
        public void onClearHistory(View view){
            webView.clearHistory();
        }
    

    好啦,关于WebView的基础用法就说到这里,下个文章,我会继续深挖WebView的使用方法,感谢各位客官的支持!!

    相关文章

      网友评论

          本文标题:WebView使用(一)--四种加载网页的方法

          本文链接:https://www.haomeiwen.com/subject/jwyhdktx.html