当全屏显示视频播放器的控件(可见)时,状态栏将返回(可见)

用户25

我使用WebView加载视频。我重写了onShowCustomView(进入全屏模式)和onHideCustomView(退出全屏模式)方法。当我进入全屏模式时,将变量fullscreen设置为trueOnSystemUiVisibilityChangeListener调用GoFullscreen()设置SYSTEM_UI_FLAG_FULLSCREEN标志并隐藏操作栏的函数:

decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN); getSupportActionBar().hide();

但是当我进入全屏模式时,如果视频控件可见,则状态栏是可见的。因此,状态栏仅在视频控件消失(不可见)时才隐藏。

屏幕截图显示了视频和状态栏控件存在的问题:

------------正常(可以)

正常模式

-----带视频控件的全屏(不正常)--------不带视频控件的全屏(正常)在此处输入图片说明 在此处输入图片说明

代码:

public class TestActivity extends AppCompatActivity {
private MyWebChromeClient mWebChromeClient = null;
private View mCustomView;
private LinearLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
private Bundle webViewBundle;
private WebView mWebView;
private int viewWidth;
private int viewHeight;
private LinearLayout.LayoutParams layoutParams;
private View decorView;
private Boolean Fullscreen = false;

private void GoFullscreen() {
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
    getSupportActionBar().hide();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
        @Override
        public void onSystemUiVisibilityChange(int visibility) {
            if (Fullscreen) {
                GoFullscreen();
            } else {
                decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
                getSupportActionBar().show();
            }
        }
    });

    mWebView = (WebView) findViewById(R.id.webView);
    mWebView.setBackgroundColor(Color.BLACK);
    mWebChromeClient = new MyWebChromeClient();
    mWebView.setWebChromeClient(mWebChromeClient);
    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    viewWidth = 480;
    viewHeight = (int) (((double) viewWidth) * 0.5625); // video aspect 16:9
    layoutParams = new LinearLayout.LayoutParams(viewWidth, viewHeight);
    mWebView.setLayoutParams(layoutParams);

    if (webViewBundle != null) {
        mWebView.restoreState(webViewBundle);
    } else {
        mWebView.loadUrl("http://vk.com/video_ext.php?oid=-89326201&id=171643607&hash=2b18b090e13222dc&hd=1");
    }
}

@Override
public void onPause() {
    super.onPause();
    webViewBundle = new Bundle();
    mWebView.saveState(webViewBundle);
    mWebView.onPause();
}

@Override
public void onResume() {
    super.onResume();
    mWebView.onResume();
}

@Override
public void onDestroy() {
    super.onDestroy();
    mWebView.destroy();
}

public class MyWebChromeClient extends WebChromeClient {
    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        // if a view already exists then immediately terminate the new one
        if (mCustomView != null) {
            callback.onCustomViewHidden();
            return;
        }
        Fullscreen = true;
        FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
        mContentView = (LinearLayout) findViewById(R.id.activity_main);
        mCustomViewContainer = new FrameLayout(TestActivity.this);
        mCustomViewContainer.setLayoutParams(LayoutParameters);
        mCustomViewContainer.setBackgroundResource(android.R.color.black);
        view.setLayoutParams(LayoutParameters);
        mCustomViewContainer.addView(view);
        mCustomView = view;
        mCustomViewCallback = callback;
        mContentView.setVisibility(View.GONE);
        GoFullscreen();
        mCustomViewContainer.setVisibility(View.VISIBLE);
        setContentView(mCustomViewContainer);
    }

    @Override
    public void onHideCustomView() {
        if (mCustomView != null) {
            // Hide the custom view.
            mCustomView.setVisibility(View.GONE);
            // Remove the custom view from its container.
            mCustomViewContainer.removeView(mCustomView);
            mCustomView = null;
            mCustomViewContainer.setVisibility(View.GONE);
            mCustomViewContainer = null;
            mCustomViewCallback.onCustomViewHidden();
            // Show the content view.
            Fullscreen = false;
            mContentView.setVisibility(View.VISIBLE);
            setContentView(mContentView);
        }
    }
}

@Override
public void onBackPressed() {
    if (mCustomViewContainer != null)
        mWebChromeClient.onHideCustomView();
    else if (mWebView.canGoBack())
        mWebView.goBack();
    else
        super.onBackPressed();
}

}

怎么解决呢?

ps build.gradle API:compileSdkVersion 23 / buildToolsVersion“ 23.0.1” / minSdkVersion 19 / targetSdkVersion 23

更新:似乎仅在KitKat上才有问题。我已经在API 23智能手机上进行了测试,但没有这个问题。仍然需要针对KitKat设备进行修复

用户25

最终,我决定不使用OnSystemUiVisibilityChangeListener(它将工作在越野车上),而只是调用FullscreenOninonShowCustomViewFullscreenOffin onHideCustomView这会很好,但仍不能完全隐藏KitKat的侧边栏(但适用于其他版本的Android)

    private void FullscreenOn() {
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        getSupportActionBar().hide();
    }

    private void FullscreenOff() {
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
        getSupportActionBar().show();
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当全屏显示视频播放器控件(可见)时,状态栏将返回(可见)

来自分类Dev

可见键盘时,Android上的状态栏会显示

来自分类Dev

iOS热点与全屏视频播放器状态栏混为一谈

来自分类Dev

在Android Webview中播放视频-视频控件不可见

来自分类Dev

连接图标在状态栏中不可见

来自分类Dev

状态栏在沉浸模式下保持可见

来自分类Dev

Apple Watch:从基于页面的导航显示模式屏幕后,状态栏不可见

来自分类Dev

当通话状态栏可见时,UIButton的点击区域会更改

来自分类Dev

尽管将UIViewControllerBasedStatusBarAppearance设置为NO,iPad mini上的状态栏仍然可见

来自分类Dev

尽管将UIViewControllerBasedStatusBarAppearance设置为NO,但iPad mini上的状态栏仍然可见

来自分类Dev

使我的播放器模型对我的相机不可见

来自分类Dev

片段不可见时如何停止媒体播放器声音?

来自分类Dev

完全可见时在UITableViewCell上播放视频

来自分类Dev

可见时返回WebElement

来自分类Dev

将焦点设置为可见时的用户控件

来自分类Dev

搜索结果在状态栏下方可见滚动

来自分类Dev

您可以在tmux中切换状态栏的可见性吗?

来自分类Dev

在iOS 8中关闭UIImagePicker后,状态栏变为可见

来自分类Dev

“播放器”没有可见的@interface声明选择器“ walkRight”

来自分类Dev

当 <div> 可见时播放声音

来自分类Dev

滚动时透明的导航栏可见

来自分类Dev

在远程桌面全屏显示期间,本地任务栏可见

来自分类Dev

使自定义视频控件不可见

来自分类Dev

如何让html5控件的视频始终可见?

来自分类Dev

可见时滚动显示jQuery动画

来自分类Dev

youtube视频播放完毕后如何使按钮可见

来自分类Dev

HTML5和Javascript仅在可见时播放视频

来自分类Dev

在播放器不可见的情况下自动播放带有HTML5 embed标签的音频

来自分类Dev

将应用程序栏按钮的可见性绑定到控件

Related 相关文章

  1. 1

    当全屏显示视频播放器控件(可见)时,状态栏将返回(可见)

  2. 2

    可见键盘时,Android上的状态栏会显示

  3. 3

    iOS热点与全屏视频播放器状态栏混为一谈

  4. 4

    在Android Webview中播放视频-视频控件不可见

  5. 5

    连接图标在状态栏中不可见

  6. 6

    状态栏在沉浸模式下保持可见

  7. 7

    Apple Watch:从基于页面的导航显示模式屏幕后,状态栏不可见

  8. 8

    当通话状态栏可见时,UIButton的点击区域会更改

  9. 9

    尽管将UIViewControllerBasedStatusBarAppearance设置为NO,iPad mini上的状态栏仍然可见

  10. 10

    尽管将UIViewControllerBasedStatusBarAppearance设置为NO,但iPad mini上的状态栏仍然可见

  11. 11

    使我的播放器模型对我的相机不可见

  12. 12

    片段不可见时如何停止媒体播放器声音?

  13. 13

    完全可见时在UITableViewCell上播放视频

  14. 14

    可见时返回WebElement

  15. 15

    将焦点设置为可见时的用户控件

  16. 16

    搜索结果在状态栏下方可见滚动

  17. 17

    您可以在tmux中切换状态栏的可见性吗?

  18. 18

    在iOS 8中关闭UIImagePicker后,状态栏变为可见

  19. 19

    “播放器”没有可见的@interface声明选择器“ walkRight”

  20. 20

    当 <div> 可见时播放声音

  21. 21

    滚动时透明的导航栏可见

  22. 22

    在远程桌面全屏显示期间,本地任务栏可见

  23. 23

    使自定义视频控件不可见

  24. 24

    如何让html5控件的视频始终可见?

  25. 25

    可见时滚动显示jQuery动画

  26. 26

    youtube视频播放完毕后如何使按钮可见

  27. 27

    HTML5和Javascript仅在可见时播放视频

  28. 28

    在播放器不可见的情况下自动播放带有HTML5 embed标签的音频

  29. 29

    将应用程序栏按钮的可见性绑定到控件

热门标签

归档