一、效果图
二、说明
Demo里面使用X5WebView和原生WebView,均可以正常横竖屏
/**
* 视频播放地址
* 这是西瓜视频的介绍,h5代码里面使用了字节跳动xgplayer的开源框架做视频播放
* https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/byted-player-videos/1.0.0/xgplayer-demo.mp4
* 如果想要替换视频播放地址,在源代码里面app/src/main/assets/dist全局搜索上面这个地址,替换即可
*/
三、源代码
package com.study.fullscreendemo.system_webview;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.widget.FrameLayout;
import com.study.fullscreendemo.R;
public class FullScreenWithSysWebViewActivity extends Activity {
SystemWebView webView;
private FrameLayout flWebView;
private FrameLayout flFullVideo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.full_screen_sys_webview_layout);
flWebView = findViewById(R.id.fl_webview);
flFullVideo = findViewById(R.id.fl_full_video);
webView = findViewById(R.id.web_filechooser);
webView.loadUrl("file:///android_asset/dist/index.html");
getWindow().setFormat(PixelFormat.TRANSLUCENT);
webView.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
webView.setWebChromeClient(new MyWebChromeClient());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
try {
super.onConfigurationChanged(newConfig);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
}
} catch (Exception e) {
e.printStackTrace();
}
}
class MyWebChromeClient extends WebChromeClient {
private View myView = null;
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
ViewGroup parent = (ViewGroup) webView.getParent();
parent.removeView(webView);
flWebView.addView(view);
flFullVideo.setVisibility(View.VISIBLE);
myView = view;
setFullScreen();
}
@Override
public void onHideCustomView() {
super.onHideCustomView();
if (myView != null) {
flFullVideo.removeAllViews();
flWebView.removeView(myView);
flWebView.addView(webView);
flFullVideo.setVisibility(View.GONE);
myView = null;
quitFullScreen();
}
}
}
private void setFullScreen() {
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
private void quitFullScreen() {
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
四、状态栏相关
<resources>
<style name="AppTheme" parent="android:Theme.NoTitleBar">
<!-- 父主题已经包含了NoTitleBar的选项 ,所以目前不需要-->
<!-- <item name="windowNoTitle">true</item>-->
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
</resources>