Android的WebView中H5頁面全屏播放視頻
作者:洪生鵬
如何讓WebView中H5頁面全屏播放視頻。關于這個問題,做一下簡單分析,希望對你有所幫助。
如何讓WebView中H5頁面全屏播放視頻。關于這個問題,做一下簡單分析,希望對你有所幫助。
和往常一樣,我們先來看效果:
運行效果
其實很簡單,就是配置問題。關鍵地方配好了,基本沒什么問題了。
- 硬件加速
- 設置WebView
在清單需要配置的AndroidManifest.xml
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity
- android:name=".WebViewActivity"
- android:configChanges="orientation|screenSize|keyboardHidden"
- android:hardwareAccelerated="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
這里需要注意的是啟動硬件加速可以 在application 啟動這個硬件加速,也可以在對應的activity啟動
- android:hardwareAccelerated="true"
還有這個
- configChanges="orientation|screenSize|keyboardHidden"
必須是
- orientation|screenSize|keyboardHidden
當然記得加上網(wǎng)絡權限
- <uses-permission android:name="android.permission.INTERNET" />
下面給出全部源碼
activity_webview.xml
- <?xml version="1.0" encoding="utf-8"?>
- <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>
WebViewActivity源碼
- public class WebViewActivity extends AppCompatActivity {
- private FrameLayout mFrameLayout;
- private WebView mWebView;
- private MyWebChromeClient mMyWebChromeClient;
- private String URL = "http://m.tv.sohu.com/20130704/n380744170.shtml";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_webview);
- mFrameLayout = (FrameLayout) findViewById(R.id.mFrameLayout);
- mWebView = (WebView) findViewById(R.id.mWebView);
- initWebView();
- mWebView.loadUrl(URL);
- }
- private void initWebView() {
- WebSettings settings = mWebView.getSettings();
- settings.setJavaScriptEnabled(true);
- settings.setJavaScriptCanOpenWindowsAutomatically(true);
- settings.setPluginState(WebSettings.PluginState.ON);
- settings.setAllowFileAccess(true);
- settings.setLoadWithOverviewMode(true);
- settings.setUseWideViewPort(true);
- settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
- settings.setCacheMode(WebSettings.LOAD_DEFAULT);
- mMyWebChromeClient = new MyWebChromeClient();
- mWebView.setWebChromeClient(mMyWebChromeClient);
- mWebView.setWebViewClient(new WebViewClient() {
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- view.loadUrl(url);
- return true;
- }
- @Override
- public void onPageFinished(WebView view, String url) {
- super.onPageFinished(view, url);
- }
- });
- }
- private class MyWebChromeClient 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();
- }
- }
- @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;
- }
- }
- @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() {
- super.onDestroy();
- mWebView.destroy();
- }
- }
【本文為51CTO專欄作者“洪生鵬”的原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】
責任編輯:武曉燕
來源:
51CTO專欄