Android 沉浸式模式-仅隐藏状态栏+;在没有用户交互的情况下经过一段时间后重新放置状态栏
我有一个带有两个工具栏的活动,一个在顶部,一个在底部。我使用反向模式,现在效果很好,它允许用户向下拖动状态栏 问题是,状态栏在被拖下来后再也不会隐藏 我在这里找到了一些解决方案,但我就是无法让它工作。要么状态栏显示在我的视图上,要么如果我打开“溢出”菜单,它就会出错,要么它不会再次隐藏 这是我目前使用的:Android 沉浸式模式-仅隐藏状态栏+;在没有用户交互的情况下经过一段时间后重新放置状态栏,android,fullscreen,android-fullscreen,android-statusbar,android-immersive,Android,Fullscreen,Android Fullscreen,Android Statusbar,Android Immersive,我有一个带有两个工具栏的活动,一个在顶部,一个在底部。我使用反向模式,现在效果很好,它允许用户向下拖动状态栏 问题是,状态栏在被拖下来后再也不会隐藏 我在这里找到了一些解决方案,但我就是无法让它工作。要么状态栏显示在我的视图上,要么如果我打开“溢出”菜单,它就会出错,要么它不会再次隐藏 这是我目前使用的: @Override protected void onResume() { super.onResume(); enableFullScreenMode(); } priva
@Override
protected void onResume()
{
super.onResume();
enableFullScreenMode();
}
private void enableFullScreenMode()
{
if (Build.VERSION.SDK_INT < 16)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
else
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_FULLSCREEN
// | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
);
}
@覆盖
受保护的void onResume()
{
super.onResume();
enableFullScreenMode();
}
私有void启用FullScreenMode()
{
如果(Build.VERSION.SDK_INT<16)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
其他的
getWindow().getDecorView().SetSystemActivity(
View.SYSTEM\u UI\u FLAG\u全屏显示
//| View.SYSTEM_UI_FLAG_布局_全屏
//| View.SYSTEM_UI_FLAG_HIDE_导航
);
}
我想要什么
- 始终全屏显示,直到用户拖动状态栏
- 例如,3秒钟后,如果状态栏未打开,则应再次隐藏状态栏
- 关闭状态栏后,应再次将其隐藏
- 在工具栏中打开“我的溢出”菜单时,状态栏不应显示
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls.
} else {
// TODO: The system bars are NOT visible. Make any desired
// adjustments to your UI, such as hiding the action bar or
// other navigational controls.
}
}
});
试试这个:
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls.
} else {
// TODO: The system bars are NOT visible. Make any desired
// adjustments to your UI, such as hiding the action bar or
// other navigational controls.
}
}
});
试试这个:
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls.
} else {
// TODO: The system bars are NOT visible. Make any desired
// adjustments to your UI, such as hiding the action bar or
// other navigational controls.
}
}
});
试试这个:
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls.
} else {
// TODO: The system bars are NOT visible. Make any desired
// adjustments to your UI, such as hiding the action bar or
// other navigational controls.
}
}
});
//1.单击后放置此项
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
hideSystemUI();
}
}
private void hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
View decorView = getWindow().getDecorView();
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);
}
//2.从布局的任何地方删除“android:fitsSystemWindows=“true”
//3.在OnResume中添加hideSystemUI(),如下所示(例如,自动重新隐藏状态和底部导航)
//1.单击后放置此项
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
hideSystemUI();
}
}
private void hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
View decorView = getWindow().getDecorView();
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);
}
//2.从布局的任何地方删除“android:fitsSystemWindows=“true”
//3.在OnResume中添加hideSystemUI(),如下所示(例如,自动重新隐藏状态和底部导航)
//1.单击后放置此项
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
hideSystemUI();
}
}
private void hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
View decorView = getWindow().getDecorView();
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);
}
//2.从布局的任何地方删除“android:fitsSystemWindows=“true”
//3.在OnResume中添加hideSystemUI(),如下所示(例如,自动重新隐藏状态和底部导航)
//1.单击后放置此项
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
hideSystemUI();
}
}
private void hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
View decorView = getWindow().getDecorView();
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);
}
//2.从布局的任何地方删除“android:fitsSystemWindows=“true”
//3.在OnResume中添加hideSystemUI(),如下所示(例如,自动重新隐藏状态和底部导航)
答案是,模式
正如医生所说:
“在几秒钟没有交互后,或者当用户触摸或示意系统栏外的任何位置时,这些栏就会自动消失。”
private void hideSystemUI(){
View decorView=getWindow().getDecorView();
decorView.setsystemivilibility(
View.SYSTEM\u UI\u FLAG\u沉浸式\u粘性
|View.SYSTEM\u UI\u FLAG\u布局\u稳定
|View.SYSTEM\u UI\u FLAG\u布局\u隐藏\u导航
|View.SYSTEM\u UI\u FLAG\u布局\u全屏显示
|View.SYSTEM\u UI\u FLAG\u HIDE\u导航
|视图。系统(用户界面、标志、全屏);
}
答案是,模式
正如医生所说:
“在几秒钟没有交互后,或者当用户触摸或示意系统栏外的任何位置时,这些栏就会自动消失。”
private void hideSystemUI(){
View decorView=getWindow().getDecorView();
decorView.setsystemivilibility(
View.SYSTEM\u UI\u FLAG\u沉浸式\u粘性
|View.SYSTEM\u UI\u FLAG\u布局\u稳定
|View.SYSTEM\u UI\u FLAG\u布局\u隐藏\u导航
|View.SYSTEM\u UI\u FLAG\u布局\u全屏显示
|View.SYSTEM\u UI\u FLAG\u HIDE\u导航
|视图。系统(用户界面、标志、全屏);
}
答案是,模式
正如医生所说:
“在几秒钟没有交互后,或者当用户触摸或示意系统栏外的任何位置时,这些栏就会自动消失。”
private void hideSystemUI(){
View decorView=getWindow().getDecorView();
decorView.setsystemivilibility(
View.SYSTEM\u UI\u FLAG\u沉浸式\u粘性
|View.SYSTEM\u UI\u FLAG\u布局\u稳定
|View.SYSTEM\u UI\u FLAG\u布局\u隐藏\u导航
|View.SYSTEM\u UI\u FLAG\u布局\u全屏显示
|View.SYSTEM\u UI\u FLAG\u HIDE\u导航
|视图。系统(用户界面、标志、全屏);
}
答案是,模式
正如医生所说:
“在几秒钟没有交互后,或者当用户触摸或示意系统栏外的任何位置时,这些栏就会自动消失。”
private void hideSystemUI(){
View decorView=getWindow().getDecorView();
decorView.setsystemivilibility(
View.SYSTEM\u UI\u FLAG\u沉浸式\u粘性
|View.SYSTEM\u UI\u FLAG\u布局\u稳定
|View.SYSTEM\u UI\u FLAG\u布局\u隐藏\u导航
|View.SYSTEM\u UI\u FLAG\u布局\u全屏显示
|View.SYSTEM\u UI\u FLAG\u HIDE\u导航
|视图。系统(用户界面、标志、全屏);
}
德语注释…删除了单个注释。。。不过,吹毛求疵、毫无成效的评论……公平地说,我正在处理同一个问题,当我找到解决方案时,我会把它发给你;)那太好了。目前我已经实现了一个有效的解决方案,但是状态栏不再自动隐藏(我不知道它何时显示,所以我无法触发调用hide函数)。所以它一直可见,直到用户再次点击屏幕。。。这是德国评论…删除了单个评论。。。不过,吹毛求疵、毫无成效的评论……公平地说,我正在处理同一个问题,当我找到解决方案时,我会把它发给你;)那太好了。目前我已经实现了一个有效的解决方案,但是状态栏不是hidi