这就是解决问题的方法(这仍然不是解决方案,但它是我能找到的最接近的解决方案)。
所以,我添加了一个OnSystemUiChangeListener
in the onInitializationSuccess
of YoutubePlayerSupportFragment
(or YoutubePlayerFragment
).
(View) getView().getParent().setOnSystemUiVisibilityChangeListener();
提供一个实现的对象OnSystemUiChangeListener
.
重写该方法onSystemUiVisibilityChange()
像这样:
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == View.SYSTEM_UI_FLAG_VISIBLE) {
scheduleNavigationBarHide();
}
else if (visibility == View.SYSTEM_UI_FLAG_HIDE_NAVIGATION || visibility == View.SYSTEM_UI_FLAG_LOW_PROFILE
|| visibility == View.SYSTEM_UI_FLAG_FULLSCREEN) {
if (navigationBarHandler != null) {
navigationBarHandler.cancel();
navigationBarHandler.purge();
navigationBarHandler = null;
}
}
}
提供方法 ScheduleNavigationBarHide() 的定义。
private void scheduleNavigationBarHide() {
if (navigationBarHandler != null) {
Log.d(TAG, "Canceling navigationBarHandler.");
navigationBarHandler.cancel();
navigationBarHandler.purge();
navigationBarHandler = null;
}
if (mContext != null && mContext instanceof JadooTVActivity) {
navigationBarHandler = new Timer();
navigationBarHandler.schedule(new TimerTask() {
public void run() {
((JadooTVActivity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
if (!isPlayerSqueezed) {
hideAsImmersiveNavigationBar(Config.context);
}
else {
Utils.showNavigationBar(Config.context);
}
}
});
}
}, 500);
}
}
所以最后hideAsImmersiveNavigationBar()
正如您可能已经猜到的那样,这是通过使Navigation Bar
暂时沉浸其中。就是这样
private void hideAsImmersiveNavigationBar(Activity activity) {
if(activity != null)
{ View decorView = activity.getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE;
decorView.setSystemUiVisibility(uiOptions);
}
}
稍后当播放器关闭时,您可能想恢复Navigation Bar
。将 UI 标志更改为int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE | View.SYSTEM_UI_FLAG_FULLSCREEN;
最后有一点免责声明:我提供了应用程序经过测试的设备列表,我不知道这是否适用于所有设备。如果您确实发现问题仍然存在的设备,请随时发表评论。此外,沉浸式模式是从 API 19 添加的,因此该解决方案无法在之前的任何设备上运行,但我只在一台运行 API 21 的设备上遇到问题。所有旧设备都运行良好。另外如果/当Navigation Bar
停留1秒,我们仍然得到覆盖错误。