您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何用PopWindow嵌套WebView加載頁面,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
PopWindow以前用了不少,第一次嘗試用WebView加載頁面.用WebView可以輕松實現網頁內嵌到APP里,還可以直接跟JS相互調用.Android的Webview在低版本和高版本采用了不同的webkit版本內核,4.4后直接使用了Chrome。
幾個設置要點
在AndroidManifest.xml設置訪問網絡權限:
布局文件:
調用方法:
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加載頁面,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。