2014-10-23 6 views
2

내가 만든 앱에는 여러 가지 활동이 있으며 전체적으로 몰입 형 모드를 원합니다. 하지만 탐색 막대와 작업 표시 줄이 잠깐 동안 나타나면 앱이 몰입 형 모드로 돌아갑니다. 나는 앱이 몰입 형 모드를 종료하지 않고 탐색 바가 팝업을하지 않기를 원한다. 여기에 제가 작성한 코드가 있습니다 :앱 전환 활동시 몰입 형 모드 종료

private static final int AUTO_HIDE_DELAY_MILLIS = 3000; 

private View mDecorView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_home); 

    backBtn=(Button)findViewById(R.id.backBtn); 
    homeBtn=(Button)findViewById(R.id.homeBtn); 
    settingsBtn=(Button)findViewById(R.id.settingsBtn); 
    settingsBtn.setOnClickListener(navBtnListener); 

    if(getIntent().getExtras()!=null){ 
     serverIP=getIntent().getExtras().getString("IP"); 
    } 

    Toast.makeText(this, serverIP, Toast.LENGTH_LONG).show(); 

    final View controlsView = findViewById(R.id.fullscreen_content_controls); 
    final View contentView = findViewById(R.id.fullscreen_content); 

    // Set up an instance of SystemUiHider to control the system UI for 
    // this activity. 
    mDecorView = getWindow().getDecorView(); 
    mDecorView.setOnSystemUiVisibilityChangeListener(
      new View.OnSystemUiVisibilityChangeListener() { 
       @Override 
       public void onSystemUiVisibilityChange(int flags) { 
        boolean visible = (flags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; 
        controlsView.setVisibility(visible 
          ?View.VISIBLE 
          :View.GONE); 
       } 
      }); 
    contentView.setClickable(true); 
    final GestureDetector clickDetector = new GestureDetector(this, 
      new GestureDetector.SimpleOnGestureListener() { 
       @Override 
       public boolean onDoubleTap(MotionEvent e) { 
        boolean visible = (mDecorView.getSystemUiVisibility() 
          & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; 
        if (visible) { 
         hideSystemUI(); 
        } 
        return true; 
       } 
      }); 
    contentView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      return clickDetector.onTouchEvent(motionEvent); 
     } 
    }); 

    showSystemUI(); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 

    // Trigger the initial hide() shortly after the activity has been 
    // created, to briefly hint to the user that UI controls 
    // are available. 
    delayedHide(3); 
} 


@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

    // When the window loses focus (e.g. the action overflow is shown), 
    // cancel any pending hide action. When the window gains focus, 
    // hide the system UI. 
    if (hasFocus) { 
     delayedHide(AUTO_HIDE_DELAY_MILLIS); 
    } else { 
     mHideHandler.removeMessages(0); 
    } 
} 

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 
      | View.SYSTEM_UI_FLAG_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_LOW_PROFILE 
      | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); 
} 

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

private final Handler mHideHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     hideSystemUI(); 
    } 
}; 

private void delayedHide(int delayMillis) { 
    mHideHandler.removeMessages(0); 
    mHideHandler.sendEmptyMessageDelayed(0, delayMillis); 
} 

나는 모든 활동에서이 코드 문자열을 사용했습니다. 활동을 바꿀 때마다 navigaion과 action bar가 나타나는이 문제를 어떻게 해결합니까?

답변

0

onPostCreate에서 delayedHide를 삭제 해보세요.

관련 문제