2015-04-17 21 views
11

Mam ListView, że chcę, aby każdy wiersz wypełnił jedną trzecią dostępnego ekranu. Mam pasek stanu widoczny, a następnie pasek akcji z przesuwanymi kartami poniżej. Robię bieżące obliczenia tak:Wysokość ekranu bez paska stanu, paska akcji i zakładek

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()); 
    } 

i ustawienie wysokości ciami tak:

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

Ale wiersze listy są nieco za duże, i myślę, że to pasek stanu powodując to. Jak mogę dodać wysokość do moich obliczeń?

+0

Czy możesz przesłać plik XML dla swojej klasy w całości? – apmartin1991

Odpowiedz

8

Na podstawie odpowiedzi @rasmety stworzyłem ten kod i to wystarczy. Moje wiersze są teraz dokładnie jedną trzecią dostępnego ekranu. Oto jak uzyskać wysokość paska stanu:

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

oraz obliczania wysokości każdego wiersza idzie tak:

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

Można użyć tego kodu:

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

jak opisano tutaj: https://stackoverflow.com/a/3410200/1763138

Spróbuj korzystania z tego rozwiązania i powiedzieć nam, czy to zadziałało. ;)

+1

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać odnośnik. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – mmackh

+0

Dziękuję za konstruktywny komentarz - masz rację. Już zredagowałem odpowiedź dla przyszłych użytkowników. – rasmeta

0

Najłatwiej jest to:

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

rootView to główny układ główny:

<?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> 
Powiązane problemy