固定状态栏和隐藏的导航栏
Fixed Status bar and hidden Navigation bar
是否可以隐藏导航栏而不隐藏状态栏?
我已经在我的样式 xml
中试过了
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
我在 activity
中像这样隐藏导航栏
val decorView = window.decorView
val uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
decorView.systemUiVisibility = uiOptions
谢谢!!
编辑:
fun hideNavigationStatusBar(activity: Activity) {
activity.window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
val decorView = activity.window.decorView
val uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
decorView.systemUiVisibility = uiOptions
}
fun translucidNavigationBar(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
val w = activity.window
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}
}
我可以用第一种方法隐藏状态和导航栏,用第二种方法保持半透明导航状态,但我仍然无法保持状态并完全隐藏导航栏。
你可以使用这个方法:
private void setTransparentStatusBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
} else {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
解决这个问题的最简单方法分为两个部分,删除导航栏,然后使状态栏透明。
1 - 删除导航栏
要删除导航栏,请在继承自 Theme.AppCompat.Light.NoActionBar.
的值文件夹下的 styles.xml 文件中创建一个新样式
然后在 manifest.xml 文件中将 Activity 的主题更改为您的自定义样式。
有了这个,导航栏将被删除,但状态栏仍然是灰色的。
2 - 使状态栏透明
您可以按照此教程使状态栏透明:
或者只需将以下内容添加到 Activity 的 onCreate 方法中:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
这样你就可以期待一个类似于下图的App风格:
3 - 完全删除状态栏
要完全隐藏状态栏,请在您的 onCreate 方法中添加:
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
阅读更多相关信息
结果:
4 - 移除导航栏
您可以在 Android 开发者网站 Hiding the navigation bar
找到解决方案
基本上只需将其添加到您的 onCreate:
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
是否可以隐藏导航栏而不隐藏状态栏?
我已经在我的样式 xml
中试过了 <item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
我在 activity
中像这样隐藏导航栏 val decorView = window.decorView
val uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
decorView.systemUiVisibility = uiOptions
谢谢!!
编辑:
fun hideNavigationStatusBar(activity: Activity) {
activity.window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
val decorView = activity.window.decorView
val uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
decorView.systemUiVisibility = uiOptions
}
fun translucidNavigationBar(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
val w = activity.window
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}
}
我可以用第一种方法隐藏状态和导航栏,用第二种方法保持半透明导航状态,但我仍然无法保持状态并完全隐藏导航栏。
你可以使用这个方法:
private void setTransparentStatusBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
} else {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
解决这个问题的最简单方法分为两个部分,删除导航栏,然后使状态栏透明。
1 - 删除导航栏
要删除导航栏,请在继承自 Theme.AppCompat.Light.NoActionBar.
的值文件夹下的 styles.xml 文件中创建一个新样式然后在 manifest.xml 文件中将 Activity 的主题更改为您的自定义样式。
有了这个,导航栏将被删除,但状态栏仍然是灰色的。
2 - 使状态栏透明
您可以按照此教程使状态栏透明:
或者只需将以下内容添加到 Activity 的 onCreate 方法中:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
这样你就可以期待一个类似于下图的App风格:
3 - 完全删除状态栏
要完全隐藏状态栏,请在您的 onCreate 方法中添加:
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
阅读更多相关信息
结果:
4 - 移除导航栏
您可以在 Android 开发者网站 Hiding the navigation bar
找到解决方案基本上只需将其添加到您的 onCreate:
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);