系统条闪光然后在沉浸式粘滞模式下消失

时间:2016-11-13 08:21:36

标签: java android

我已经在Android上阅读了很多关于沉浸式粘性模式的问题,但我无法找到针对我的问题的具体答案。

我已阅读onBackPressed function not working under IMMERSIVE STICKY mode,但在按下ImageButton时我的应用程序成功返回。

我希望在整个应用期间保持沉浸式粘性模式。使用和不使用共享元素转换启动新活动时没有问题。然而,当我回去时,系统条有时会出现,然后很快再次滑出视野。特别是当我停留一段时间的活动时,就会发生这种情况。

从_TrickPage.class调用此转换:

public void setBorroRingsOnClickListener(View view){
    dBHelper.close();
    Intent intent = new Intent(this, _DominoScene.class);
    startActivity(intent);
}

我调用finish()从_Domino.class返回_TrickPage.class:

findViewById(R.id.picture).setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        dBHelper.close();
        finish();
    }
});

我使用的另一个转换是共享元素转换。以下是ButtonAdapter的内部类,它扩展了BaseAdapter,这是我的_Submenu Activity中的一个对象:

class MyOnClickListener implements View.OnClickListener {

    private final int position;

    public MyOnClickListener(int position){
        this.position = position;
    }

    @Override
    public void onClick(View v) {
        ...

        //link clicked button to _TrickPage button for shared transition
        v.setTransitionName("trick");

        //make and start shared transition to _TrickPage
        ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
                (Activity)mContext,
                new Pair<View, String>(v, "trick")
        );
        Intent intent = new Intent(v.getContext(), _TrickPage.class);
        v.getContext().startActivity(intent, options.toBundle());
    }
}

最后,为了从_TrickPage回到_Submenu,我打电话给finishaftertransition():

    picture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dBHelper.close();
            hideMainContent();
            finishAfterTransition();
        }
    });

我在所涉及的活动的onCreate()和onResume()方法中设置了UI标志:_Submenu,_TrickPage和_DominoScene。我还在每项活动中都有以下内容:

public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    //if (hasFocus)
        getWindow().getDecorView().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
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

    if (hasFocus && playAnimations) {
        //showMainContent();
        playAnimations = false;
    }
}

这是我第一次询问有关Stack Overflow的问题,所以如果您认为我的代码存在任何问题,请询问我代码的其他任何部分。谢谢!

1 个答案:

答案 0 :(得分:0)

从每个Activity调用onCreate方法(在setContentView方法之后)调用此方法。还有onWindowsFocusChanged

public void goImmersive()
{
getWindow().getDecorView().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
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}