如何将我的状态栏设置为透明但导航栏保持黑色?
How do I set my status bar transparent but keep by navigation bar black?
正如我的问题所暗示的,我正在尝试弄清楚如何在保持导航栏 black/natural 颜色(不影响屏幕高度)的同时将状态栏颜色设置为透明
我提到了这个网站:
部分有效的解决方案之一是:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
但这会将我的屏幕内容推到导航栏下方,使其透明。我希望屏幕尺寸保持不变,同时保持导航栏的自然色。只想使状态栏透明,但似乎所有其他方法都使它变成灰白色,即使我使用(setstatusbarcolor
选项)将其设置为透明也是如此。
关于如何着手的任何想法?我的 min SDK 版本是 23。
第二个视图是在状态栏工作的上方添加代码后的视图,但屏幕在下方滑动使导航栏也透明(即使设置 fitsSystemWindows = false
也无济于事)。
提前致谢!
您需要在 activity 主题中添加以下样式。
在 styles.xml
中找到您 activity 的主题并添加以下内容。由于您的SDK 最低版本为23,因此您无需担心Android 之前的版本。
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowTranslucentStatus">true</item>
这是我得到的截图。
这是我的主题风格。
<style name="NoActionBar" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
希望能解决您的问题。
尝试做下面提到的事情可能会对您的示例有所帮助。如果您仍然面临问题,请告诉我。如果它能解决您的问题,请提供答案。
AndroidManifest.xml
<activity
....
android:theme="@style/TranslucentStatusBarTheme">
</activity>
values-v23\styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TranslucentStatusBarTheme" parent="AppTheme">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">true</item>
</style>
</resources>
Activity.java
private static void setWindowFlag(Activity activity, boolean on) {
Window win = activity.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
if (on) {
winParams.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
} else {
winParams.flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
}
win.setAttributes(winParams);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// Check if the version of Android is Marshmallow or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int newUiOptions = getWindow().getDecorView().getSystemUiVisibility();
newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
getWindow().getDecorView().setSystemUiVisibility(newUiOptions
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
// Check if the version of Android is Lollipop or higher
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
setWindowFlag(this, false);
getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.colorTranslucent));
}
super.onCreate(savedInstanceState);
}
正如我的问题所暗示的,我正在尝试弄清楚如何在保持导航栏 black/natural 颜色(不影响屏幕高度)的同时将状态栏颜色设置为透明
我提到了这个网站:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
但这会将我的屏幕内容推到导航栏下方,使其透明。我希望屏幕尺寸保持不变,同时保持导航栏的自然色。只想使状态栏透明,但似乎所有其他方法都使它变成灰白色,即使我使用(setstatusbarcolor
选项)将其设置为透明也是如此。
关于如何着手的任何想法?我的 min SDK 版本是 23。
第二个视图是在状态栏工作的上方添加代码后的视图,但屏幕在下方滑动使导航栏也透明(即使设置 fitsSystemWindows = false
也无济于事)。
提前致谢!
您需要在 activity 主题中添加以下样式。
在 styles.xml
中找到您 activity 的主题并添加以下内容。由于您的SDK 最低版本为23,因此您无需担心Android 之前的版本。
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowTranslucentStatus">true</item>
这是我得到的截图。
这是我的主题风格。
<style name="NoActionBar" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
希望能解决您的问题。
尝试做下面提到的事情可能会对您的示例有所帮助。如果您仍然面临问题,请告诉我。如果它能解决您的问题,请提供答案。
AndroidManifest.xml
<activity
....
android:theme="@style/TranslucentStatusBarTheme">
</activity>
values-v23\styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TranslucentStatusBarTheme" parent="AppTheme">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">true</item>
</style>
</resources>
Activity.java
private static void setWindowFlag(Activity activity, boolean on) {
Window win = activity.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
if (on) {
winParams.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
} else {
winParams.flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
}
win.setAttributes(winParams);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// Check if the version of Android is Marshmallow or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int newUiOptions = getWindow().getDecorView().getSystemUiVisibility();
newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
getWindow().getDecorView().setSystemUiVisibility(newUiOptions
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
// Check if the version of Android is Lollipop or higher
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
setWindowFlag(this, false);
getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.colorTranslucent));
}
super.onCreate(savedInstanceState);
}