深色透明状态栏,不透明导航栏

7

等等,这不是重复的问题

类似的问题已经在这里被问到,但没有解决深色文本状态栏的问题。

我想要做什么

我想同时实现以下三个目标:

  1. 透明状态栏(不隐藏它!)
  2. 深色文本状态栏
  3. 不透明(或黑色)导航栏(使活动内容不会膨胀到其下面)

我尝试过什么

解决方案

            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

这里的解决方案只能实现1和3;

这个链接提供的解决方案只能实现1和2;

而这个链接提供的解决方案只能实现2和3....

问题

那么有没有一种方法可以同时实现1、2和3?!


这里的解决方案只能实现1和2。但是在那个答案中,导航栏是透明的,活动内容绘制在其下方。而您已经说过您想要“不透明(或黑色)的导航栏(不允许活动内容在其下膨胀)”。您的要求不太清楚。 - azizbekian
我的需求很清楚,而且你已经明白了,我想要一个不透明的导航栏,但是那个答案只能实现透明的导航栏。矛盾在哪里? - Sira Lam
现在我明白了,是我的错误。 - azizbekian
@azizbekian 不用介意,你的答案非常有效! - Sira Lam
1个回答

8
styles.xml 中:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:navigationBarColor">@android:color/black</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

在活动的 onCreate() 中:
override fun onCreate(savedInstanceState: Bundle?) {
  window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)
}

将会产生以下结果:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接