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

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小神的简书,当然怎样获取到就看你的技术了!反正我是写了,自己找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值