首次触摸事件后如何隐藏状态和导航栏?

Pru*_*hvi 1 android show-hide android-statusbar

我一直在使用这些标志SYSTEM_UI_FLAG_FULLSCREENSYSTEM_UI_FLAG_HIDE_NAVIGATION隐藏和显示状态栏和导航栏。他们工作正常。我在活动开始时将它们隐藏起来,我想在触摸事件中再次显示它们。Android会在第一次触摸事件时自动显示它们(此第一次触摸事件不会传递给我的应用程序)。我想sendMessageDelayed()在一段时间后用来隐藏两个栏。我如何使用此首次触摸事件?

Pru*_*hvi 5

我通过使用得到了View.OnSystemUiVisibilityChangeListener。我只Handler.sendMessageDelayed在状态和导航栏都可见的情况下使用了if条件。为了清楚起见,请参见以下实现。

来源:响应UI可见性更改

View decorView = getActivity().getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {@Override
    public void onSystemUiVisibilityChange(int visibility) {
        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
            // TODO: The system bars are visible. Make any desired
            Message msg = mHandler.obtainMessage(HIDE_STATUSBAR); //Implement your hide functionality accordingly                
            mHandler.sendMessageDelayed(msg, 3000);
        } else {
            // TODO: The system bars are NOT visible. Make any desired

            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是您的应用无法使用首次触摸事件。我认为在这种情况下,您必须使用其他方法,例如WindowManager.LayoutParams沉浸式全屏模式