Android WebView简单整理

记得第一次用webview的时候,就会个loadUrl,最近想着自己写个简单浏览器玩玩,发现了一些问题,于是写一篇文章,文章分两大类,一类为使用,另一类为简单问题解决。(老规矩最后有源码)

前言

于 Android P (9.0)限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉,所以如果访问没有https协议的网站默认不不可以访问的。

一、webview的简单使用

1.load网址

  //找到控件  web_view = (WebView) findViewById(R.id.web_view);  //加载网页  web_view.loadUrl(weburl);

如果你是真机调试,且手机系统比较高的话,应该会报错:网页无法加载,应为:net :ERR_CLEARTEXT_NOT_PERMITTED(解决方式于第二个某块)

2.设置一些属性

        web_view = (WebView) findViewById(R.id.web_view);        WebSettings webSettings = web_view.getSettings();        // 让WebView能够执行javaScript        webSettings.setJavaScriptEnabled(true);        // 让JavaScript可以自动打开windows        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);        //是否允许访问文件        webSettings.setAllowFileAccess(true);        // 设置缓存        webSettings.setAppCacheEnabled(true);        // 设置缓存模式,一共有四种模式        webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK);        // 支持缩放(适配到当前屏幕)        webSettings.setSupportZoom(true);        // 将图片调整到合适的大小        webSettings.setUseWideViewPort(true);        // 支持内容重新布局        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);        // 设置可以被显示的屏幕控制        webSettings.setDisplayZoomControls(true);        // 设置默认字体大小        webSettings.setDefaultFontSize(12);        web_view.loadUrl(weburl);

这里就只介绍本例子用的一些属性了,如需了解更多,请前往Android中文文档

3.写一个监听

        web_view.setWebViewClient(new WebViewClient() {            //当新的 url 即将被加载的时候---->用户点击了 Webview 内容里面的一个超链接的时候会触发该方法的调用            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                return false;            }            //在页面加载开始时调用。            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                super.onPageStarted(view, url, favicon);            }            //在页面加载结束时调用。            @Override            public void onPageFinished(WebView view, String url) {                weburl=url;                super.onPageFinished(view, url);            }
});

4.返回上一次浏览的页面

 @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if ((keyCode == KeyEvent.KEYCODE_BACK)) {            if (web_view.canGoBack()) {                web_view.goBack();                return true;            } else {                finish();                return true;            }
} return false; }

二、遇到的一些问题

1.ERR_CLEARTEXT_NOT_PERMITTED

原因:于 Android P (9.0)限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉,所以如果访问没有https协议的网站默认不不可以访问的。
解决:

在AndroidManifest.xml文件的application标签中添加

android:usesCleartextTraffic="true"

2.便页面支持缩放

WebSettings webSettings =web_view.getSettings();       webSettings.setJavaScriptEnabled(true);  webSettings.setBuiltInZoomControls(true);webSettings.setSupportZoom(true);

3.自适应屏幕

WebSettings webSettings =web_view.getSettings();       webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放webSettings.setLoadWithOverviewMode(true);

三、源码

WebActivity.java

public class WebActivity extends Activity {
private WebView web_view; private String weburl = "http://www.jimengjia.com/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); initView(); webViewClient(); webViewSetting(); }
private void initView() { web_view = (WebView) findViewById(R.id.web_view);

} private void webViewClient(){ web_view.setWebViewClient(new WebViewClient() { //当新的 url 即将被加载的时候---->用户点击了 Webview 内容里面的一个超链接的时候会触发该方法的调用 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } //在页面加载开始时调用。 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } //在页面加载结束时调用。 @Override public void onPageFinished(WebView view, String url) { weburl=url; super.onPageFinished(view, url); }
}); } private void webViewSetting(){ WebSettings webSettings = web_view.getSettings(); // 让WebView能够执行javaScript webSettings.setJavaScriptEnabled(true); //是否允许访问文件 webSettings.setAllowFileAccess(true); // 让JavaScript可以自动打开windows webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 设置缓存 webSettings.setAppCacheEnabled(true); // 设置缓存模式,一共有四种模式 webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK); // 支持缩放(适配到当前屏幕) webSettings.setSupportZoom(true); // 将图片调整到合适的大小 webSettings.setUseWideViewPort(true); // 支持内容重新布局 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 设置可以被显示的屏幕控制 webSettings.setDisplayZoomControls(true); // 设置默认字体大小 webSettings.setDefaultFontSize(12); web_view.loadUrl(weburl); } //返回上一次浏览的页面 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { if (web_view.canGoBack()) { web_view.goBack(); return true; } else { finish(); return true; }
} return false; }

}

activity_web.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".WebActivity"><WebView    android:id="@+id/web_view"    android:layout_width="match_parent"    android:layout_height="match_parent"/></RelativeLayout>

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/221942.html

联系我们
联系我们
分享本页
返回顶部