web-dev-qa-db-fra.com

Puis-je définir FLAG_LAYOUT_NO_LIMITS uniquement pour la barre d'état?

Je dois faire la barre d'état transparente. J'utilise getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) et la barre d'état est définie comme je le souhaite. Mais cela affecte également la barre de navigation: il est devenu transparent et getWindow().setNavigationBarColor(Color.BLACK) ne fait rien.

Existe-t-il un moyen de rendre la barre d'état transparente uniquement et non la barre de navigation?

37
BArtWell

ce travail pour moi

getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)

styles.xml

<style name="TranslucentStatusBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowTranslucentStatus">true</item>
</style>

v21\styles.xml

<style name="TranslucentStatusBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowDrawsSystemBarBackgrounds">false</item>
    <item name="Android:windowTranslucentStatus">true</item>
</style>

la barre d'état sera transparente ou translucide, la barre de navigation ne sera pas

j'espère que cela t'aides!

11
Chorld
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
10
ScuAdam

en utilisant le commentaire de mikepenz

ce que je travaille exactement le code (converti en kotlin) ci-dessous ici.

// at AppCompatActivity, min SDK is 16, I tested api 25
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    }
    if (Build.VERSION.SDK_INT >= 19) {
        window.decorView.systemUiVisibility =
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    }
    if (Build.VERSION.SDK_INT >= 21) {
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.statusBarColor = Color.TRANSPARENT
    }

    setContentView(R.layout.activity_main)
}
6
mgcation

Vous pouvez utiliser comme ceci Pour masquer la barre d'état et la barre de navigation

WindowManager.LayoutParams attributes = getWindow().getAttributes();
    attributes.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
    getWindow().setAttributes(attributes);

et pour afficher à nouveau la barre de navigation, utilisez cette 

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

    }

la couleur est gris pour moi, peut-être que vous pouvez le forcer à votre couleur primaire

3
Riadh Madridista

j'ai trouvé la solution bro

<style name="transparent" parent="Theme.AppCompat.Light.NoActionBar">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat
    <item name="Android:windowTranslucentStatus">false</item>
    <item name="Android:windowDrawsSystemBarBackgrounds">false</item>
    //Other styling(optional)
</style>

puis appliquez ce thème transparent à votre manifeste d'activité comme celui-ci

 <activity
      ...
      Android:theme="@style/transparent"/>
1
Robokishan
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

Juste drapeau ci-dessus a fonctionné pour moi. Les boutons de navigation sont visibles, la barre d'état et la barre d'action sont masquées.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

Ne fonctionne pas. Lien entre le périphérique de test 5.

1
Eugene P.
fun showTransparentStatusbar() {
        activity!!.window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }


    fun removeStatusbarFlags() {
        activity!!.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }
1
nawaab saab

oui, vous pouvez utiliser ce code dans Style.xml

<style name="transparent" parent="Theme.AppCompat.Light">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat

    <item name="colorPrimaryDark">#00000000</item>//THIS is the important part.
    //Other styling(optional)
</style>

Ensuite, pour l'appliquer à votre mise en page, ajoutez simplement la ligne suivante dans la mise en page racine (vue):

Android:theme="@style/transparent"
0
Idrish Multani