來咱們 一步一步的配置的哈
需要在AndroidManifest.xml
文件中聲明需要使用HardwareAccelerate
。務必強制打開硬件加速,否則只有聲音沒有畫面,因為在Android 5的部分rom上默認關閉硬件加速的,此時需要強制打開硬件加速。
方式一:聲明整個應用都需要加速:
< application ... android:hardwareAccelerated ="true">
方式二:在Activity中聲明:
<activity ... android:hardwareAccelerated="true" >
硬件加速配置好后,添加android:configChanges
配置
webView
所在的Activity
添加如下配置,不添加無法全屏播放。
...
android:configChanges="orientation|screenSize|keyboardHidden"
...
權限記得添加
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
二、webView
控件所在的xml文件內容
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mFrameLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/mWebView" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
三、Activity
中初始化webView
1.去掉標題,否則可能導致無法全屏;
2.初始布局中的兩個控件;
3.webView一些簡單初始化和配置,根據需求靈活修改;
class MyActivity extends Activity { ... private FrameLayout mFrameLayout; private WebView mWebView; private InsideWebChromeClient mInsideWebChromeClient; //private JavascriptInterface javascriptInterface; private String URL = "改成自己需要測試的H5網頁"; @Override protected void onCreate(Bundle saveInstanceState) { // 1 requestWindowFeature(Window.FEATURE_NO_TITLE); // 2 mFrameLayout = (FrameLayout) findViewById(R.id.mFrameLayout); mWebView = (WebView) findViewById(R.id.mWebView); // 3 initWebView(); mWebView.loadUrl(URL); } private void initWebView() { WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setPluginState(WebSettings.PluginState.ON); //settings.setPluginsEnabled(true); settings.setAllowFileAccess(true); settings.setLoadWithOverviewMode(true); settings.setUseWideViewPort(true); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); settings.setCacheMode(WebSettings.LOAD_DEFAULT); mInsideWebChromeClient = new InsideWebChromeClient(); InsideWebViewClient mInsideWebViewClient = new InsideWebViewClient(); //javascriptInterface = new JavascriptInterface(); //mWebView.addJavascriptInterface(javascriptInterface, "java2js_laole918"); mWebView.setWebChromeClient(mInsideWebChromeClient); mWebView.setWebViewClient(mInsideWebViewClient); } }
四、自定義WebChromeClient
類
步驟三種mInsideWebChromeClient = new InsideWebChromeClient();
初始化的是自定義的WebChromeClient
類,這里就開始創建該類
思路:在onShowCustomView
方法中,講獲取到的view
放到當前Activity
的最上方,在onHideCustomView
中,將之前的view
隱藏或者刪除,將原來被覆蓋的webview
放回來。並結束播放。
public Class MyActivity extends Activity { ... private class InsideWebChromeClient extends WebChromeClient { private View mCustomView; private CustomViewCallback mCustomViewCallback; @Override public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); if (mCustomView != null) { callback.onCustomViewHidden(); return; } mCustomView = view; mFrameLayout.addView(mCustomView); mCustomViewCallback = callback; mWebView.setVisibility(View.GONE); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } public void onHideCustomView() { mWebView.setVisibility(View.VISIBLE); if (mCustomView == null) { return; } mCustomView.setVisibility(View.GONE); mFrameLayout.removeView(mCustomView); mCustomViewCallback.onCustomViewHidden(); mCustomView = null; setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.onHideCustomView(); } } ... }
五、自定義WebViewClient
,在Activity
內部類。
重寫WebViewClient
在onPageFinished()
方法中可以注入JS語句。按需求添加。
... private class InsideWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //mWebView.loadUrl(javascript); } } ...
六、在Activity
中復寫onConfigurationChanged
方法
... @Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); switch (config.orientation) { case Configuration.ORIENTATION_LANDSCAPE: getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); break; case Configuration.ORIENTATION_PORTRAIT: getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); break; } }
七、Activity
聲明周期內webView
的操作
... @Override public void onPause() { super.onPause(); mWebView.onPause(); } @Override public void onResume() { super.onResume(); mWebView.onResume(); } @Override public void onBackPressed() { if (mWebView.canGoBack()) { mWebView.goBack(); return; } super.onBackPressed(); } @Override public void onDestroy() { mWebView.destroy(); super.onDestroy(); } ...
思路:在onShowCustomView
方法中,講獲取到的view
放到當前Activity
的最上方,在onHideCustomView
中,將之前的view
隱藏或者刪除,將原來被覆蓋的webview
放回來。並結束播放。
八、沒有正確全屏可能的原因
點擊全屏按鈕后,寬度拉寬了,高度也高了,但是可以上下滑動,看起來像是一個橫屏的網頁,這是偽全屏。

1.檢查
AndroidManifest.xml
清單文件,
WebView
控件所在的
Activity
配置信息是否添加
android:configChanges
或者是否
orientation
,
screenSize
,
keyboardHidden
寫全了。我之前就是忘記寫了個
screenSize
參數,點擊視頻全屏按鈕后,是一個偽全屏。還可以上下滑動呢。
## 犯錯的錯誤寫成了如下:
android:configChanges="orientation|keyboardHidden" -->
## 正確的寫法:
android:configChanges="orientation|screenSize|keyboardHidden"
2.檢查Activity
的主題是否NoActionBar
了。
小技巧:html5測試的URL獲取
打開搜狐,播放一個視頻,查看源代碼,查找以下代碼,url就是html5。
<meta name="mobile-agent" content="format=html5;url=http://m.tv.sohu.com/20140508/n399272261.shtml">
最后
- 不懂得可以私信我,我會在第一時間回復。