如何用PopWindow嵌套WebView加载页面

本篇文章为大家展示了如何用PopWindow嵌套WebView加载页面,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

创新互联始终致力于在企业网站建设领域发展。秉承“创新、求实、诚信、拼搏”的企业精神,致力为企业提供全面的网络宣传与技术应用整体策划方案,为企业提供包括“网站建设、响应式网站开发、手机网站建设、微信网站建设、小程序开发商城网站制作、平台网站建设秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

PopWindow以前用了不少,第一次尝试用WebView加载页面.用WebView可以轻松实现网页内嵌到APP里,还可以直接跟JS相互调用.Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome。

几个设置要点

在AndroidManifest.xml设置访问网络权限:

如何用PopWindow嵌套WebView加载页面

布局文件:

如何用PopWindow嵌套WebView加载页面

调用方法:

        webView = (WebView) findViewById(R.id.webView);
        //WebView加载web资源
       webView.loadUrl("http://baidu.com");
        //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
       webView.setWebViewClient(new WebViewClient(){
           @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
               //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
             view.loadUrl(url);
            return true;
        }
       });

几个要点

        //复写shouldOverrideUrlLoading()方法,使得打开网页时不调用系统浏览器, 而是在本WebView中显示
        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

        }

        //在popwindow里面下面setBuiltInZoomControls这个属性一定不能打开,否则崩溃
        webSettings.setBuiltInZoomControls(false); //设置内置的缩放控件。若为false,则该WebView不可缩放

自己封装的一个Popwindow打开WebView的类:

源码:

package scm.vaccae.basemodule;

import android.content.Context;
import android.graphics.drawable.PaintDrawable;
import android.net.http.SslError;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.PopupWindow;

/**
 * Created by Administrator on 2017-11-12.
 * 用PopWindow来加载WebView显示网页
 */

public class ShowWebView {

    private static Context mContext;
    private static View mView;
    private static PopupWindow mPopupWindow;
    private static WebView mWebView;

    public static void show(Context context, String url) {
        mContext = context;
        mView = LayoutInflater.from(mContext).inflate(R.layout.webview, null);
        //初始化PopWindow
        InitPopWindow();
        //初始化WebView
        InitWebView(url);
    }

    private static void InitWebView(String url) {
        mWebView = (WebView) mView.findViewById(R.id.webview);
        //加载页面
        mWebView.loadUrl(url);
        //声明WebSettings子类
        WebSettings webSettings = mWebView.getSettings();
        //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
        webSettings.setJavaScriptEnabled(true);
        // 若加载的 html 里有JS 在执行动画等操作,会造成资源浪费(CPU、电量)
        // 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可
        //支持插件
        webSettings.setPluginState(WebSettings.PluginState.ON);
        //设置自适应屏幕,两者合用
        webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
        //缩放操作
        webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
        //在popwindow里面下面setBuiltInZoomControls这个属性一定不能打开,否则崩溃
        webSettings.setBuiltInZoomControls(false); //设置内置的缩放控件。若为false,则该WebView不可缩放
        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
        //其他细节操作
        webSettings.setAppCacheEnabled(true);  //启动缓存
        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); //关闭webview中缓存
        webSettings.setAllowFileAccess(true); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

        //复写shouldOverrideUrlLoading()方法,使得打开网页时不调用系统浏览器, 而是在本WebView中显示
        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            //处理https请求 webView默认是不处理https请求的,页面显示空白,需要进行如下设置:
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed();    //表示等待证书响应
                // handler.cancel();      //表示挂起连接,为默认方式
                // handler.handleMessage(null);    //可做其他处理
            }
        });
        mWebView.setWebChromeClient(new WebChromeClient());
    }

    private static void InitPopWindow() {
        //获取屏幕分辨率
        DisplayMetrics metric = mContext.getResources().getDisplayMetrics();
        //设置mPopupWindow大小按屏幕的十分之七来算
        int width = metric.widthPixels / 10 * 7;  // 宽度(PX)
        int height = metric.heightPixels / 10 * 7;  // 高度(PX)

        mPopupWindow = new PopupWindow(mView, width,
                height);
        mPopupWindow.setContentView(mView);
        mPopupWindow.setTouchable(true);
        //必须设置背景
        mPopupWindow.setBackgroundDrawable(new PaintDrawable());
        //设置焦点
        mPopupWindow.setFocusable(true);
        //设置popupwindow出现的位置
        mPopupWindow.setOutsideTouchable(true);
        mPopupWindow.showAtLocation(mView, Gravity.CENTER, 0, 0);

        //关闭时释放webview
        mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                if (mWebView != null) {
                    mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
                    mWebView.clearHistory();

                    ((ViewGroup) mWebView.getParent()).removeView(mWebView);
                    mWebView.destroy();
                    mWebView = null;
                }
                System.gc();
            }
        });
    }
}

XML布局文件:


    android:id="@+id/webview_layout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

            android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

调用方法:

ShowWebView.show(this, "http://www.baidu.com");

上述内容就是如何用PopWindow嵌套WebView加载页面,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


当前题目:如何用PopWindow嵌套WebView加载页面
本文来源:http://myzitong.com/article/ppjoch.html