您的位置:首页 > 移动开发 > Android开发

Android中的WebView达到一种web端可以运行app端代码的高度

2017-08-15 11:35 483 查看

WebView代码展示演示

//直接上来展示我的类

public class WebViewActivity<T> extends Activity implements View.OnClickListener {
//网页Url地址   eg: https://www.bing.com/az/hprichbg/rb/QuakingAspens_ZH-CN11296287476_1920x1080.jpg protected String mUrl;

//控件WebView
protected WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置布局
setContentView(R.layout.activity_web_view);
//获取bundle数据,将Url获取出来
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
mUrl = bundle.getString("Url");
if (mUrl != null) {
Log.i("Url", mUrl);
}
}
initView();
}

private void initView() {
//获取WebView
mWebView = (WebView) findViewById(R.id.activity_web_view_webview);

//WebChromeClient可以显示js的效果,主要辅助WebView处理JavaScript对话框,加载进度,上传文件等
mWebView.setWebChromeClient(new WebChromeClient());

//设置可以支持缩放,但是只设置此属性并不能实现手动缩放,在某些版本的手机上也只是能实现点击缩放
mWebView.getSettings().setSupportZoom(true);

//设置使用默认的缩放控制器,默认是false
mWebView.getSettings().setBuiltInZoomControls(false);

//自适应屏幕,其实这个属性并不推荐,也是Google放弃的一个属性。此属性用来控制页面的布局,有三个类型:
//SINGLE_COLUMN:把所有内容放大到webview等宽的一列中。
//NORMAL:正常显示不做任何渲染。
//NARROW_COLUMNS:可能的话
4000
让所有列的宽度不超过屏幕宽度。
mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);

//设置默认加载的可视范围是大视野范围,此属性为true表示用尽可能大的视野展示页面,一般和setUseWideViewPort搭配使用。当然大视野显示的字都很小。
mWebView.getSettings().setLoadWithOverviewMode(true);

//不显示默认的+/-缩放控制View, 默认是true
mWebView.getSettings().setDisplayZoomControls(false);

//支持 H5 的session storage和local storage
mWebView.getSettings().setDomStorageEnabled(true);

//支持javascript读,写db
mWebView.getSettings().setDatabaseEnabled(true);

//设置js创建的db文件的路径, Api 19以后废弃,直接有webview管理
mWebView.getSettings().setDatabasePath(this.getApplicationContext().getCacheDir().getAbsolutePath());

// 启用地理定位
mWebView.getSettings().setGeolocationEnabled(true);

//设置是否阻止加载网络图片,默认是`false`,如果设置为`true`,那么网络图片将不会加载.(可以先设置为true,然后再设置为false,来加快页面加载速度)
mWebView.getSettings().setBlockNetworkImage(false);

//设置使用宽的Viewpoint,默认是false
//Android browser以及chrome for Android的设置是`true`
//而WebView的默认设置是`false`
//如果设置为`true`,那么网页的可用宽度为`980px`,并且可以通过 meta data来设置
//如果设置为`false`,那么可用区域和WebView的显示区域有关.
mWebView.getSettings().setUseWideViewPort(true);

//设置支持javascript,默认是false
mWebViewDisplay.getSettings().setJavaScriptEnabled(true);

//通过下面定义接口中的方法,如果涉及到一些ui界面上的处理和操作的话,需要在主线程中进行
mWebViewDisplay.addJavascriptInterface(new WebApp(), "WebApp");

// 兼容webview加载https与http混合页面时5.0以下系统图片加载不出来的问题
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mWebViewDisplay.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

mWebViewDisplay.setWebViewClient(new WebViewClient() {

//在网页上的所有加载都经过这个方法,这个函数我们可以做很多操作。比如获取url,查看url.contains(“add”),进行添加操作
@Override
public boolean shouldOverrideUrlLoading(WebView view, final String url) {
return true;
}

//开始载入页面时调用的,我们可以设定一个loading的页面,告诉用户程序在等待网络响应。
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

//onPageFinished(WebView view, String url) //在页面加载结束时调用, 我们可以关闭loading 条,切换程序动作。
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}

//报告错误信息
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
}

//让webview处理https请求。
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
}
});

//如果mUrl不为空,则WebView加载网页
if (!TextUtils.isEmpty(mUrl)) {
mWebView.loadUrl(mUrl);
}
}

/**
* H5通过调用back方法,就实现了返回上个Activity
*
* H5通过调用getVersionCode方法,就可以获取application的版本号
*/
public  class WebApp {

//H5返回按钮调用本地Activity的finish方法,结束Activity
@JavascriptInterface
public void back() {
finish();
}

//获取Application的版本号
@JavascriptInterface
public void getVersionCode() {
Log.e("webApp","getVersionCode");
PackageUtils.getVersionCode(mContext);
}

}
}


最后当然有福利了,大家可以关注一下Android小神的简书,当然怎样获取到就看你的技术了!反正我是写了,自己找
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: