|
|
|
|
移动端
创建专栏

Android的WebView中H5页面全屏播放视频

如何让WebView中H5页面全屏播放视频。关于这个问题,做一下简单分析,希望对你有所帮助。

作者:洪生鹏|2017-05-10 07:33

有奖调研 | 1TB硬盘等你拿 AI+区块链的发展趋势及应用调研


如何让WebView中H5页面全屏播放视频。关于这个问题,做一下简单分析,希望对你有所帮助。

和往常一样,我们先来看效果:

运行效果

其实很简单,就是配置问题。关键地方配好了,基本没什么问题了。

  • 硬件加速
  • 设置WebView

在清单需要配置的AndroidManifest.xml

  1. <application 
  2.     android:allowBackup="true" 
  3.     android:icon="@mipmap/ic_launcher" 
  4.     android:label="@string/app_name" 
  5.     android:supportsRtl="true" 
  6.     android:theme="@style/AppTheme"
  7.     <activity 
  8.         android:name=".WebViewActivity" 
  9.         android:configChanges="orientation|screenSize|keyboardHidden" 
  10.         android:hardwareAccelerated="true"
  11.         <intent-filter> 
  12.           <action android:name="android.intent.action.MAIN" /> 
  13.           <category android:name="android.intent.category.LAUNCHER" /> 
  14.         </intent-filter> 
  15.     </activity> 
  16. </application> 

这里需要注意的是启动硬件加速可以 在application 启动这个硬件加速,也可以在对应的activity启动

  1. android:hardwareAccelerated="true" 

还有这个

  1. configChanges="orientation|screenSize|keyboardHidden" 

必须是

  1. orientation|screenSize|keyboardHidden 

当然记得加上网络权限

  1. <uses-permission android:name="android.permission.INTERNET" /> 

下面给出全部源码

activity_webview.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:id="@+id/mFrameLayout" 
  4.     android:layout_width="match_parent" 
  5.     android:layout_height="match_parent"
  6.  
  7.     <WebView 
  8.         android:id="@+id/mWebView" 
  9.         android:layout_width="match_parent" 
  10.         android:layout_height="match_parent" /> 
  11. </FrameLayout> 

WebViewActivity源码

  1. public class WebViewActivity extends AppCompatActivity  { 
  2.     private FrameLayout mFrameLayout; 
  3.     private WebView mWebView; 
  4.     private MyWebChromeClient mMyWebChromeClient; 
  5.     private String URL = "http://m.tv.sohu.com/20130704/n380744170.shtml"
  6.     @Override 
  7.     protected void onCreate(Bundle savedInstanceState) { 
  8.         requestWindowFeature(Window.FEATURE_NO_TITLE); 
  9.         super.onCreate(savedInstanceState); 
  10.         setContentView(R.layout.activity_webview); 
  11.         mFrameLayout = (FrameLayout) findViewById(R.id.mFrameLayout); 
  12.         mWebView = (WebView) findViewById(R.id.mWebView); 
  13.         initWebView(); 
  14.         mWebView.loadUrl(URL); 
  15.     } 
  16.     private void initWebView() { 
  17.         WebSettings settings = mWebView.getSettings(); 
  18.         settings.setJavaScriptEnabled(true); 
  19.         settings.setJavaScriptCanOpenWindowsAutomatically(true); 
  20.         settings.setPluginState(WebSettings.PluginState.ON); 
  21.         settings.setAllowFileAccess(true); 
  22.         settings.setLoadWithOverviewMode(true); 
  23.         settings.setUseWideViewPort(true); 
  24.         settings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
  25.         settings.setCacheMode(WebSettings.LOAD_DEFAULT); 
  26.         mMyWebChromeClient = new MyWebChromeClient(); 
  27.         mWebView.setWebChromeClient(mMyWebChromeClient); 
  28.         mWebView.setWebViewClient(new WebViewClient() { 
  29.             public boolean shouldOverrideUrlLoading(WebView view, String url) { 
  30.                 view.loadUrl(url); 
  31.                 return true
  32.             } 
  33.  
  34.             @Override 
  35.             public void onPageFinished(WebView view, String url) { 
  36.                 super.onPageFinished(view, url); 
  37.             } 
  38.         }); 
  39.     } 
  40.  
  41.     private class MyWebChromeClient extends WebChromeClient { 
  42.         private View mCustomView; 
  43.         private CustomViewCallback mCustomViewCallback; 
  44.         @Override 
  45.         public void onShowCustomView(View view, CustomViewCallback callback) { 
  46.             super.onShowCustomView(view, callback); 
  47.             if (mCustomView != null) { 
  48.                 callback.onCustomViewHidden(); 
  49.                 return
  50.             } 
  51.             mCustomView = view
  52.             mFrameLayout.addView(mCustomView); 
  53.             mCustomViewCallback = callback; 
  54.             mWebView.setVisibility(View.GONE); 
  55.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
  56.         } 
  57.  
  58.         public void onHideCustomView() { 
  59.             mWebView.setVisibility(View.VISIBLE); 
  60.             if (mCustomView == null) { 
  61.                 return
  62.             } 
  63.             mCustomView.setVisibility(View.GONE); 
  64.             mFrameLayout.removeView(mCustomView); 
  65.             mCustomViewCallback.onCustomViewHidden(); 
  66.             mCustomView = null
  67.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
  68.             super.onHideCustomView(); 
  69.         } 
  70.     } 
  71.     @Override 
  72.     public void onConfigurationChanged(Configuration config) { 
  73.         super.onConfigurationChanged(config); 
  74.         switch (config.orientation) { 
  75.             case Configuration.ORIENTATION_LANDSCAPE: 
  76.                 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
  77.                 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
  78.                 break; 
  79.             case Configuration.ORIENTATION_PORTRAIT: 
  80.                 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
  81.                 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
  82.                 break; 
  83.         } 
  84.     } 
  85.     @Override 
  86.     public void onPause() { 
  87.         super.onPause(); 
  88.         mWebView.onPause(); 
  89.     } 
  90.  
  91.     @Override 
  92.     public void onResume() { 
  93.         super.onResume(); 
  94.         mWebView.onResume(); 
  95.     } 
  96.  
  97.     @Override 
  98.     public void onBackPressed() { 
  99.         if (mWebView.canGoBack()) { 
  100.             mWebView.goBack(); 
  101.             return
  102.         } 
  103.         super.onBackPressed(); 
  104.     } 
  105.  
  106.     @Override 
  107.     public void onDestroy() { 
  108.         super.onDestroy(); 
  109.         mWebView.destroy(); 
  110.     } 

【本文为51CTO专栏作者“洪生鹏”的原创稿件,转载请联系原作者】

戳这里,看该作者更多好文

【编辑推荐】

  1. 外媒速递:实现WIndows 10 PC与Android顺畅协作的七种方式
  2. 外媒速递:6个最常见的Android问题解决方案
  3. Android五分钟轻松教会你掌握WebView与JS交互
  4. Android获取LinearLayout宽高
  5. Android图片放大缩小动画,竟如此简单
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

热门职位+更多