【发布时间】:2017-12-14 01:43:46
【问题描述】:
我正在尝试使用 SimpleExoPlayerView 实现全屏模式。我主要使用 setSystemUiVisibility 来解决这个问题。
在 onCreate 期间,我添加了一个 OnSystemUiVisibilityChange 侦听器以同步隐藏播放器控件与操作栏。
@Override
public void onCreate(Bundle savedInstanceState) {
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(onSystemUiChange());
hideSystemUI();
}
在 OnSystemUiVisibilityChangeListener 中,我还设置了与 simpleExoplayerViews 超时匹配的超时,因此控件和操作栏同时隐藏。
@NonNull
private View.OnSystemUiVisibilityChangeListener onSystemUiChange() {
return new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
mSimpleExoPlayerView.showController();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//sync the hide system ui with
//simpleExoPlayerView's auto hide timeout
hideSystemUI();
}
}, mSimpleExoPlayerView.getControllerShowTimeoutMs());
} else {
mSimpleExoPlayerView.hideController();
}
}
};
}
private void hideSystemUI() {
View rootView = findViewById(R.id.root);
rootView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
);
}
除了一种情况外,这很好用。如果您点击屏幕,然后在 SimpleExoPlayerView 控件超时之前再次点击它,SimpleExoPlayerView 将被隐藏,但系统 ui 在超时之前不会设置。有什么活动可以代替吗?
我已尝试为我的根布局设置 onClick 和 onTouch 侦听器,但这些事件没有被触发,我怀疑 SimpleExoPlayerView 可能正在吞噬它们?
【问题讨论】:
-
我遇到了同样的问题。它与
SimpleExoPlayerView无关。onTouch()不起作用的原因是,每当设置SYSTEM_UI_FLAG_FULLSCREEN时,第一个事件总是由 DecoreView 捕获,并且后续事件可用于其他视图。 -
您可以尝试使用
postDelayed显示和隐藏。它可能有效,也可能无效,我从未尝试过。 -
嗯,我去看看,谢谢提示
标签: android exoplayer2.x