我正在尝试使用 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 可能正在吞噬它们?