public class HTML5WebView extendsWebView {privateContext mContext;privateMyWebChromeClient mWebChromeClient;privateView mCustomView;privateFrameLayout mCustomViewContainer;privateWebChromeClient.CustomViewCallback mCustomViewCallback;privateFrameLayout mContentView;privateFrameLayout mBrowserFrameLayout;privateFrameLayout mLayout;static final String LOGTAG = "HTML5WebView";private voidinit(Context context) {
mContext=context;
Activity a=(Activity) mContext;
mLayout= newFrameLayout(context);
mBrowserFrameLayout=(FrameLayout) LayoutInflater.from(a).
inflate(R.layout.custom_screen,null);
mContentView=(FrameLayout) mBrowserFrameLayout.findViewById(R.id.main_content);
mCustomViewContainer=(FrameLayout) mBrowserFrameLayout.
findViewById(R.id.fullscreen_custom_content);
mLayout.addView(mBrowserFrameLayout, COVER_SCREEN_PARAMS);
mWebChromeClient= newMyWebChromeClient();
setWebChromeClient(mWebChromeClient);
setWebViewClient(newMyWebViewClient());//配置webview
WebSettings s =getSettings();
s.setBuiltInZoomControls(true);//设置支持缩放
s.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
s.setUseWideViewPort(true);//设置此属性,可任意比例缩放
s.setLoadWithOverviewMode(true);
s.setSaveFormData(true);
s.setJavaScriptEnabled(true);//支持js
s.setGeolocationEnabled(true);
s.setGeolocationDatabasePath("/data/data/com.jereh.html5webview/databases/");
s.setDomStorageEnabled(true);
mContentView.addView(this);
}publicHTML5WebView(Context context) {super(context);
init(context);
}publicHTML5WebView(Context context, AttributeSet attrs) {super(context, attrs);
init(context);
}public HTML5WebView(Context context, AttributeSet attrs, intdefStyle) {super(context, attrs, defStyle);
init(context);
}publicFrameLayout getLayout() {returnmLayout;
}public booleaninCustomView() {return (mCustomView != null);
}public voidhideCustomView() {
mWebChromeClient.onHideCustomView();
}
@Overridepublic boolean onKeyDown(intkeyCode, KeyEvent event) {if (keyCode ==KeyEvent.KEYCODE_BACK) {if ((mCustomView == null) &&canGoBack()){
goBack();return true;
}
}return super.onKeyDown(keyCode, event);
}private class MyWebChromeClient extendsWebChromeClient {privateBitmap
mDefaultVideoPoster;privateView
mVideoProgressView;//Android 使WebView支持HTML5 Video(全屏)播放的方法
@Overridepublic voidonShowCustomView(View view, WebChromeClient.CustomViewCallback
callback){
HTML5WebView.this.setVisibility(View.GONE);(mCustomView != null) {
callback.onCustomViewHidden();return;
}
mCustomViewContainer.addView(view);
mCustomView=view;
mCustomViewCallback=callback;
mCustomViewContainer.setVisibility(View.VISIBLE);
}
@Overridepublic voidonHideCustomView() {if (mCustomView == null)return;//Hide the custom view.
mCustomView.setVisibility(View.GONE);//Remove the custom view from its container.
mCustomViewContainer.removeView(mCustomView);
mCustomView= null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
HTML5WebView.this.setVisibility(View.VISIBLE);
}
@OverridepublicBitmap getDefaultVideoPoster() {if (mDefaultVideoPoster == null) {
mDefaultVideoPoster=BitmapFactory.decodeResource(
getResources(), R.drawable.default_video_poster);
}returnmDefaultVideoPoster;
}
@OverridepublicView getVideoLoadingProgressView() {if (mVideoProgressView == null) {
LayoutInflater inflater=LayoutInflater.from(mContext);
mVideoProgressView= inflater.inflate(R.layout.video_loading_progress, null);
}returnmVideoProgressView;
}
@Overridepublic voidonReceivedTitle(WebView view, String title) {
((Activity) mContext).setTitle(title);
}
@Overridepublic void onProgressChanged(WebView view, intnewProgress) {
((Activity) mContext).getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
newProgress*100);
}
@Overridepublic voidonGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
callback.invoke(origin,true, false);
}
}private class MyWebViewClient extendsWebViewClient {
@Overridepublic booleanshouldOverrideUrlLoading(WebView view, String url) {return false;
}
}static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS =
newFrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}