在Android中,沉浸式模式是指隐藏系统状态栏和导航栏,使应用程序的界面能够占据整个屏幕空间。然而,沉浸式模式只能生效一次,当用户滑动屏幕或者显示系统UI时,工具栏可能会被遮挡或者状态栏导航栏会重新显示。
要解决这个问题,你可以使用View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
和View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
标志来将布局延伸到状态栏和导航栏的区域,并使用View.SYSTEM_UI_FLAG_FULLSCREEN
和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
标志来隐藏状态栏和导航栏。
下面是一个示例代码,演示如何在Activity中实现沉浸式模式并控制工具栏的显示和隐藏:
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private boolean isToolbarVisible = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 隐藏状态栏和导航栏
hideSystemUI();
// 设置点击事件监听器,用于切换工具栏的显示和隐藏
findViewById(R.id.toggle_toolbar_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleToolbarVisibility();
}
});
}
private void hideSystemUI() {
// 隐藏状态栏和导航栏
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
private void toggleToolbarVisibility() {
// 切换工具栏的显示和隐藏
isToolbarVisible = !isToolbarVisible;
if (isToolbarVisible) {
getSupportActionBar().show();
} else {
getSupportActionBar().hide();
}
}
}
在这个示例中,我们在onCreate()
方法中调用hideSystemUI()
来隐藏状态栏和导航栏。然后,在点击事件监听器中调用toggleToolbarVisibility()
来切换工具栏的显示和隐藏状态。
这样,当应用程序运行时,状态栏和导航栏会被隐藏,工具栏的显示状态可以通过点击按钮来切换。当用户滑动屏幕或者显示系统UI时,工具栏会重新显示,但状态栏和导航栏仍然保持隐藏。