2016-11-13 35 views
2

我已閱讀了很多關於Android上的沉浸式粘滯模式的問題,但我無法找到針對我的問題的特定答案。系統欄Flash隨後在沉浸式粘滯模式中消失

我已閱讀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); 
} 

我呼籲結束()從_Domino.class回到_TrickPage.class:

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

我用另一種過渡共享元素轉換。下面是一個內部類ButtonAdapter的,它擴展了BaseAdapter,對象在我_Submenu活動:

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; 
    } 
} 

這是我第一次問關於堆棧溢出的問題,所以請向我的代碼的任何其他地方,如果你認爲有可能是有問題。謝謝!

回答

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); 
} 
+0

所有參與活動確實有()在OnCreate中執行該代碼(的setContentView()調用之後)的onResume()和onWindowsFocusChanged()。雖然我可以通過這樣做來重構,但我認爲它不會解決問題。 – Didoubletwice

+0

它沒有爲我工作。我使用上面的方法體創建了一個全局靜態方法'goImmersive(Window window)',所以所有的活動都可以通過調用'HelperFunctions.goImmersive(getWindow());'在setContentView()之後將此方法調用放入OnCreate並在每個活動的onWindowsFocusChanged()方法中,但是當我回去時條形仍然閃爍。 – Didoubletwice