Android隐藏导航栏/单击按钮时保持沉浸模式
一件看起来很简单的事情给我带来了一些问题。我已经从以下方面了解了解决方案: 我有一个简单的活动,上面有一个ImageButton。我想处于沉浸式的状态。我在创建时调用以下方法 问题 在屏幕上的第一次单击始终会显示导航栏,而不会触发单击处理程序。有没有一种简单/不太老套的方法来阻止这种情况Android隐藏导航栏/单击按钮时保持沉浸模式,android,android-immersive,Android,Android Immersive,一件看起来很简单的事情给我带来了一些问题。我已经从以下方面了解了解决方案: 我有一个简单的活动,上面有一个ImageButton。我想处于沉浸式的状态。我在创建时调用以下方法 问题 在屏幕上的第一次单击始终会显示导航栏,而不会触发单击处理程序。有没有一种简单/不太老套的方法来阻止这种情况 public void hideNavigationBar() { final View decorView = getWindow().getDecorView()
public void hideNavigationBar()
{
final View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
decorView.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);
}
}
});
}
您必须记住添加此方法:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && 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);
}
}
这会自动将其隐藏起来,即使在按下按钮或屏幕时也是如此。我太傻了(自从我使用Android已经有一段时间了)
这解决了问题:
private void hideNavigationBar()
{
View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = 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;
decorView.setSystemUiVisibility(uiOptions);
}