2014-10-01 373 views
1

我试图在我的全屏Android应用程序中隐藏导航栏,如this document所述。这可以工作,但仅限于纵向(*)。如果应用旋转到风景,则OnSystemUiVisibilityChangeListener停止发射。如果应用程序然后旋转回肖像,OnSystemUiVisibilityChangeListener再次开始触发。我试图从onCreate()onResume()调用此代码,效果是一样的。Android OnSystemUiVisibilityChangeListener仅在肖像中触发

final View decor=getWindow().getDecorView(); 
decor.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { 
    public void onSystemUiVisibilityChange(int visibility) { 
     android.util.Log.d("d", "onSystemUiVisibilityChange"); 
     new Handler().postDelayed(new Runnable() { 
      public void run(){ 
       decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
      } 
     }, 1500); 
    } 
}); 
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

(*),它可以在任何方向的应用程序在开始 - 如果应用在景观开始​​,听者只大火景观,如果应用在人像开始,听者只能以横向火灾。

+0

这是在运行4.4.4的物理电话;在运行4.0的模拟器上,上面的代码正常工作。 – iter 2014-10-01 20:45:42

回答

1

尝试在方向更改后再次设置。 在活动下的Manifest文件中使用android:configChanges =“orientation”。

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.my_layout); 
    final View decor=getWindow().getDecorView(); 
    decor.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { 
     public void onSystemUiVisibilityChange(int visibility) { 
      android.util.Log.d("d", "onSystemUiVisibilityChange"); 
      new Handler().postDelayed(new Runnable() { 
       public void run(){ 
        decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
       } 
      }, 1500); 
     } 
    }); 
    decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

    // and here comes the other initializations you have done in the onCreate method. 
}