web-dev-qa-db-fra.com

Hauteur de l'écran sans barre d'état, barre d'actions et onglets

J'ai un ListView que je veux que chaque ligne remplisse un tiers de l'écran disponible. J'ai la barre d'état visible, puis une barre d'actions avec des tablettes coulissantes dessous. Je fais le calcul actuel comme ceci:

height = context.getResources().getDisplayMetrics().heightPixels;
if (context.getTheme().resolveAttribute(Android.R.attr.actionBarSize, tv, true))
    {
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,context.getResources().getDisplayMetrics());
        Log.d("actionBarHeigth", actionBarHeight.toString());
    }

Et définir la hauteur des vues comme ceci:

holder.imageView.getLayoutParams().height = (height - actionBarHeight*2) / 3;

Mais les rangées de la liste sont un peu trop grandes et je suppose que c'est la barre d'état qui en est la cause. Comment puis-je en ajouter la hauteur à mes calculs?

13
Kæmpe Klunker

Basé sur la réponse de @rasmeta, j’ai créé ce code et c’est tout. Mes rangées représentent maintenant exactement le tiers de l'écran disponible. Voici comment obtenir la hauteur de la barre d'état:

int resource = context.getResources().getIdentifier("status_bar_height", "dimen", "Android");
    if (resource > 0) {
        statusBarHeight = context.getResources().getDimensionPixelSize(resource);
    }

Et le calcul de la hauteur de chaque rangée se déroule comme suit:

holder.imageView.getLayoutParams().height = (screenHeight - statusBarHeight - actionBarHeight*2) / 3;
// actionBarHeight * 2 because the tabs have the same height as the actionBar.
9
Kæmpe Klunker

Vous pouvez utiliser ce code:

public int getStatusBarHeight() { 
      int result = 0;
      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "Android");
      if (resourceId > 0) {
          result = getResources().getDimensionPixelSize(resourceId);
      } 
      return result;
}

comme décrit ici: https://stackoverflow.com/a/3410200/1763138

S'il vous plaît essayez d'utiliser cette solution et dites-nous si cela a fonctionné. ;)

3
rasmeta

Le moyen le plus simple est le suivant:

int height = findViewById(R.id.rootView).getHeight();

rootView est la mise en page racine principale:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/rootView"
    Android:orientation="vertical"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
      ...
</LinearLayout>
0
Maxime Claude