WebView使用(一)--四种加载网页的方法
其实这个控件相对来说说还是比较复杂的,但是学会之后,又会觉得其实也没有这么难,同时在学习的过程也会遇到不少的坑,让我觉得差点窒息,不过多亏各位书友发布的各种神技,我的问题也迎刃而解了,下面就是主要内容了:
第一种加载方法: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、打开浏览器后,使用模拟器或者真机测试的,都会看到下面这个内容,然后点进去
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的使用方法,感谢各位客官的支持!!