https://github.com/tuisme/CO3038_2018/blob/8a72a70211b4c27dfab643513c0fdc1bed9fad8c/CO3038/Tools/Browser/app/src/main/java/de/baumann/browser/Activity/BrowserActivity.java#L2757
@Override
public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
if (view == null) {
return;
}
if (customView != null && callback != null) {
callback.onCustomViewHidden();
return;
}
customView = view;
originalOrientation = getRequestedOrientation();
fullscreenHolder = new FullscreenHolder(this);
fullscreenHolder.addView(
customView,
new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
));
FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
decorView.addView(
fullscreenHolder,
new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
));
customView.setKeepScreenOn(true);
((View) currentAlbumController).setVisibility(View.GONE);
setCustomFullscreen(true);
if (view instanceof FrameLayout) {
if (((FrameLayout) view).getFocusedChild() instanceof VideoView) {
videoView = (VideoView) ((FrameLayout) view).getFocusedChild();
videoView.setOnErrorListener(new VideoCompletionListener());
videoView.setOnCompletionListener(new VideoCompletionListener());
}
}
customViewCallback = callback;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
public boolean onHideCustomView() {
if (customView == null || customViewCallback == null || currentAlbumController == null) {
return false;
}
FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
if (decorView != null) {
decorView.removeView(fullscreenHolder);
}
customView.setKeepScreenOn(false);
((View) currentAlbumController).setVisibility(View.VISIBLE);
setCustomFullscreen(false);
fullscreenHolder = null;
customView = null;
if (videoView != null) {
videoView.setOnErrorListener(null);
videoView.setOnCompletionListener(null);
videoView = null;
}
setRequestedOrientation(originalOrientation);
ninjaWebView.reload();
return true;
}
//用于和video标签 全屏按钮的 监听 点击全屏按钮
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
Log.e("Media", "onShowCustomView ............ ");
if (makePhotoUtils!=null){
makePhotoUtils.setFullScreen();
}
if (myCallback != null) {
myCallback.onCustomViewHidden();
myCallback = null;
Log.e("Media", "myCallback.onCustomViewHidden()...");
return;
}
long id = Thread.currentThread().getId();
if (makePhotoUtils==null) return;
ViewGroup parent = (ViewGroup) makePhotoUtils.webView.getParent();
String s = parent.getClass().getName();
Log.v("WidgetChromeClient", "rong debug Ex: " + s);
parent.removeView(makePhotoUtils.webView);
parent.addView(view);
myView = view;
myCallback = callback;
}
private View myView = null;
private CustomViewCallback myCallback = null;
//用于和video标签 全屏按钮的 监听 点击关闭全屏按钮
@Override
public void onHideCustomView() {
long id = Thread.currentThread().getId();
Log.v("Media", "onrong debug in hideCustom Ex: " + id);
if (makePhotoUtils!=null){
makePhotoUtils.setNoFullScreen();
}
if (myView != null) {
if (myCallback != null) {
myCallback.onCustomViewHidden();
myCallback = null;
}
ViewGroup parent = (ViewGroup) myView.getParent();
parent.removeView(myView);
parent.addView(makePhotoUtils.webView);
myView = null;
}
2
class MyWebChromeClient extends WebChromeClient {
private View myView = null;
// 全屏
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
ViewGroup parent = (ViewGroup) mWebview.getParent();
parent.removeView(mWebview);
// 设置背景色为黑色
view.setBackgroundColor(mActivity.getResources().getColor(R.color.black));
parent.addView(view);
myView = view;
setFullScreen();
titleBar.setVisibility(View.GONE);
}
// 退出全屏
@Override
public void onHideCustomView() {
super.onHideCustomView();
if (myView != null) {
ViewGroup parent = (ViewGroup) myView.getParent();
parent.removeView(myView);
parent.addView(mWebview);
myView = null;
titleBar.setVisibility(View.VISIBLE);
quitFullScreen();
}
}
}
/**
* 设置全屏
*/
private void setFullScreen() {
// 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏
mActivity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
/**
* 退出全屏
*/
private void quitFullScreen() {
// 声明当前屏幕状态的参数并获取
final WindowManager.LayoutParams attrs = mActivity.getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
mActivity.getWindow().setAttributes(attrs);
mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
public class WindowManagerUtils {
public static void fullScreen(Activity pActivity) {
WindowManager.LayoutParams attrs = pActivity.getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
pActivity.getWindow().setAttributes(attrs);
if (android.os.Build.VERSION.SDK_INT >= 14) {
//noinspection all
pActivity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
}
}
public static void smallScreen(Activity pActivity) {
WindowManager.LayoutParams attrs = pActivity.getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
pActivity.getWindow().setAttributes(attrs);
if (android.os.Build.VERSION.SDK_INT >= 14) {
//noinspection all
pActivity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
}
// 智能开启硬件加速
public static void refreshHardwareAccelerationSetting(WebView _webView) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB
&& _webView.getHeight() < 4096
&& _webView.getWidth() < 4096) {
_webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
_webView.setLayerType(View.LAYER_TYPE_NONE, null);
}
}
// 关闭硬件加速
public static void closeHardwareAcceleration(WebView _webView) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
_webView.setLayerType(View.LAYER_TYPE_NONE, null);
}
}
https://www.tabnine.com/code/java/methods/android.webkit.WebChromeClient$CustomViewCallback/onCustomViewHidden
网友评论