全屏活动不允许滑动

时间:2014-03-26 09:39:37

标签: android fullscreen

我想要实现的是使用全屏模式的图库:当单击屏幕时,将显示控件,当再次单击时,它们将被隐藏。 我尝试过这种方式设置OnClickListener来管理系统UI

public void onClick(View v) {
    //toggle state
    systemUIVisible = !systemUIVisible;

    //show controls
    if(systemUIVisible) {
        controlsView.setSystemUiVisibility(
                   View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                           | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                           | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }
    //hide controls
    else {
        controlsView.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
                           | View.SYSTEM_UI_FLAG_IMMERSIVE);
    }
}

我已经设定了

controlsView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {... }

管理控件的可见性。

问题是,只要controlsView TOUCHED ,系统UI可见性就会切换,而不是点击时切换。

当用户尝试以全屏模式滑动图库时,这会导致显示控件的不良行为。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

问题在于View.SYSTEM_UI_FLAG_HIDE_NAVIGATION标志。来自doc:

存在一个限制:因为导航控件非常重要,所以用户最少 互动将使他们立即重新出现。当这发生时,两者都有 此标志将自动清除,以便两个元素同时重新出现。

所以我只需更换

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

View.SYSTEM_UI_FLAG_LOW_PROFILE

答案 1 :(得分:0)

在这种情况下, NOT 使用onClickListener。 它通过此代码解决

View contentView = findViewById(R.id.contentLayout);
contentView.setClickable(true);

final GestureDetector clickDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            boolean visible = (mDecorView.getSystemUiVisibility()
                    & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
            if (visible) 
                hideSystemUI();
            else 
                showSystemUI();
            return true;
        }
    });

contentView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return clickDetector.onTouchEvent(event);
        }
    });

以及进入/隐藏沉浸式全屏模式的功能:

 private void hideSystemUI() {
    mDecorView.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
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

private void showSystemUI() {
    mDecorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

我在罗马努里克的视频中发现了这个问题 https://developer.android.com/training/system-ui/immersive.html