Dans mon thème, j'ai défini les règles suivantes pour dessiner mes vues derrière la barre d'état:
<item name="Android:statusBarColor">@Android:color/transparent</item>
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
Et dans l'activité (onCreate):
getWindow.getDecorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
)
Ensuite, dans ma vue, j'utilise un scanner de codes barres qui est supposé dessiner derrière la barre d'état, ce qui fonctionne. Cependant, lorsque j'applique le Android:fitsSystemWindows
à une vue enfant, sa position n'est pas ajustée. Cela fonctionne quand je l'applique à l'élément racine, cependant.
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<my.Scanner
Android:id="@+id/scanner"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
<FrameLayout Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"> <!-- Should receive a top padding, right? -->
<View Android:layout_width="50dp"
Android:layout_height="50dp"
Android:background="@color/red" />
</FrameLayout>
</FrameLayout>
Mon problème était très probablement lié aux attributs fitsSystemWindows
multiples/imbriqués qui ne fonctionnent pas comme je l’ai découvert plus tard. J'ai résolu mon problème en appliquant l'attribut à une vue, puis en copiant les rembourrages dans d'autres vues qui en ont besoin via un ViewTreeObserver.OnGlobalLayoutListener
. C'est un bidule laid, mais fait son travail pour l'instant.
Utilisez CoordinatorLayout comme racine pour votre vue, cela a fonctionné pour moi.
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
Je rencontre le même problème dans Android 4.4
Mon problème est <item name="Android:windowTranslucentStatus">true</item>
conflit avec <item name="Android:fitsSystemWindows">true</item>
Mon chemin est supprimer <item name="Android:windowTranslucentStatus">true</item>
pour moi le problème était que le clavier cache un champ editText qui est placé à la fin de l'activité ..J'ai essayé toutes les solutions et rien ne marche ..__ J'utilisais ce code avant l'appel à la méthode setContentView()
la barre d'état transparente:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
Window w = getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
Je l'ai enlevé et également supprimé le fichier Android:windowSoftInputMode="adjustResize|adjustPan" from the maneifest
et maintenant cela fonctionne.