7
votes

Wait, it is not a duplicate

A similar question has been asked here, but not addressing dark-text status bar.

What I want to do

I want to achieve 3 things at the same time:

  1. Transparent status bar (Not hiding it!)
  2. Dark-text status bar
  3. Opaque (or black) navigation bar (which does not let activity content inflate underneath it)

What I have tried

The solution

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

can only achieve 1 and 3;

The solution here can only achieve 1 and 2;

And the solution here can only achieve 2 and 3....

The Question

So is there a way to achieve all 1, 2 an 3?!

1
The solution here can only achieve 1 and 2 But in that answer navigation bar is transparent and activity's content is drawn beneath of it. Whereas you have told that you want Opaque (or black) navigation bar (which does not let activity content inflate underneath it). You requirement is not quite clear. - azizbekian
My requirement is clear and you have already got it, I want opaque navigation bar but that answer can only achieve transparent navigation bar. Where is the contradiction? - Sira Lam
Now I see, my fault - azizbekian
@azizbekian Don't mind, your answer worked like a charm! - Sira Lam

1 Answers

8
votes

Inside 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>

In activity's 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)
}

Will result in this: