中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用PopWindow嵌套WebView加載頁面

發布時間:2022-01-04 18:09:10 來源:億速云 閱讀:208 作者:柒染 欄目:大數據

本篇文章為大家展示了如何用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布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview_layout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

</LinearLayout>

調用方法:

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

上述內容就是如何用PopWindow嵌套WebView加載頁面,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扶余县| 寿阳县| 读书| 嫩江县| 沙雅县| 深圳市| 绵阳市| 方城县| 伊宁县| 通山县| 巨鹿县| 无棣县| 东乡族自治县| 和静县| 新郑市| 佛山市| 泸定县| 库车县| 安康市| 榆中县| 华池县| 威信县| 焦作市| 高密市| 铜鼓县| 东山县| 长兴县| 巴林左旗| 曲阜市| 遂宁市| 稷山县| 永昌县| 资兴市| 乌拉特前旗| 涿鹿县| 兴安县| 甘南县| 鄂州市| 蒲城县| 梨树县| 新绛县|