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

来源:互联网 发布:网站源码加密授权中心 编辑:程序博客网 时间:2024/05/22 22:22

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:可能的话让所有列的宽度不超过屏幕宽度。        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小神的简书,当然怎样获取到就看你的技术了!反正我是写了,自己找

阅读全文
0 0
原创粉丝点击