最近要支持一个视频挑战的活动,要求 WebView 能全屏播放视频,现在把 Android 端实现的方法分享给大家。
要实现全屏需要给 WebView 设置 WebChromeClient 并覆写 onShowCustomView 和 onHideCustomView() 两方法:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// 此处的 view 就是全屏的视频播放界面,需要把它添加到我们的界面上
}
@Override
public void onHideCustomView() {
// 退出全屏播放,我们要把之前添加到界面上的视频播放界面移除
}
});
为了实现全屏的效果,需要将视频界面添加我们界面的最上层,有两种方式,一种是添加到 ContentView 中,核心代码如下:
contentParentView = findViewById(android.R.id.content);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
contentParentView.addView(view);
}
@Override
public void onHideCustomView() {
contentParentView.removeView(fullScreenView);
}
});
另一种是添加到 WindowManager 中,完整代码如下:
public class WebActivity extends AppCompatActivity {
...
private WindowManager windowManager;
private View fullScreenView = null;
@Override
protected void onResume() {
super.onResume();
// 如果之前处于全屏状态,重新进入后需要再次调用全屏
if (fullScreenView != null) fullScreen(fullScreenView);
}
@Override
public void onBackPressed() {
// 全屏状态点击返回退出全屏
if (fullScreenView != null) {
windowManager.removeViewImmediate(fullScreenView);
fullScreenView = null;
} else {
super.onBackPressed();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
windowManager = getWindowManager();
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// 此处的 view 就是全屏的视频播放界面,需要把它添加到我们的界面上
windowManager.addView(view, new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_APPLICATION));
// 去除状态栏和导航按钮
fullScreen(view);
fullScreenView = view;
}
@Override
public void onHideCustomView() {
// 退出全屏播放,我们要把之前添加到界面上的视频播放界面移除
windowManager.removeViewImmediate(fullScreenView);
fullScreenView = null;
}
});
}
private void fullScreen(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
} else {
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。