我试图在我的全屏 Android 应用程序中隐藏导航栏作为 this document描述。这有效,但仅适用于纵向(*)。如果应用旋转到横向,OnSystemUiVisibilityChangeListener
将停止触发。如果应用随后旋转回纵向,OnSystemUiVisibilityChangeListener
将再次开始触发。我尝试从 onCreate()
和 onResume()
调用这段代码,效果是一样的。
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);
(*) 无论应用以何种方向启动,它都能正常工作——如果应用以横向启动,则监听器仅在横向启动,如果应用以纵向启动,则监听器仅在横向启动。
最佳答案
方向改变后尝试重新设置。 在 Activity 下的 list 文件中使用 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.
}
关于Android OnSystemUiVisibilityChangeListener 仅在纵向模式下触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150072/