我的应用包含一个显示图片和视频的ViewPager。应用程序应该在水龙头上进入沉浸式视图,并在3秒后从水龙头中取出沉浸式视图。我还希望状态栏始终隐藏。这主要是有效的,但是......
我使用的是Android Studio中生成的SystemUIHider类的变体。我创建了一个名为SystemUIHiderKitKat的新类,它使用这些标志。 单击屏幕将显示导航和操作栏(而不是状态栏)。在3秒内单击将隐藏导航和状态栏。等待超过3秒将自动隐藏导航和操作栏。
条形图的视频按预期运行,但没有MediaController:Working
切换MediaController时,条形视频无法正常工作:Not Working
mShowFlags = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
mHideFlags = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE;
mTestForHiddenFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
我的VideoView和MediaController都是自定义FrameLayout类的成员
public class MyVideoView extends FrameLayout
{
setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener()
{
@Override
public void onSystemUiVisibilityChange(int visibility)
{
final int hidden = SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_HIDE_NAVIGATION | SYSTEM_UI_FLAG_FULLSCREEN;
if ((hidden & visibility) != 0) {
m_mediaController.hide(); // A
}
else {
m_mediaController.show(); // B
}
}
});
如果我评论A行和B行,一切都很完美("工作"视频)。如果没有注释掉A行和B行,那么当我单击Action Bar时会隐藏,但导航栏没有(" Not Working" video)。在一两秒内,delayedHide(int delayMillis)方法被调用,然后导航栏会隐藏(!!)。现在,这让我感到困惑,因为调用相同的hide()方法并使用与第一次调用相同的标志值调用mAnchorView.setSystemUiVisibility(mHideFlags)(显然)