2015-04-17 14 views
11

Ho un controllo ListView che voglio che ogni riga riempia un terzo dello schermo disponibile. Ho la barra di stato visibile e quindi una actionBar con i tasti di scorrimento al di sotto. Sto facendo il calcolo corrente in questo modo:Altezza dello schermo senza barra di stato, actionBar e schede

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

e impostando l'altezza di vista in questo modo:

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

Ma le righe della lista sono un po 'troppo grande, e credo che sia la barra di stato causandolo. Come posso aggiungere l'altezza di questo ai miei calcoli?

+0

Puoi pubblicare il file XML per la tua classe per favore per intero? – apmartin1991

risposta

8

In base alla risposta di @rasmeta ho creato questo codice e fa il trucco. Le mie righe ora sono esattamente un terzo dello schermo disponibile. Ecco come ottenere l'altezza della barra di stato:

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

E il calcolo della altezza di ciascuna riga è questa:

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

È possibile utilizzare questo codice:

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

come descritto qui: https://stackoverflow.com/a/3410200/1763138

Si prega di provare a utilizzare questa soluzione e ci dicono se ha funzionato. ;)

+1

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. – mmackh

+0

Grazie per un commento costruttivo - hai ragione. Ho già modificato la risposta per i futuri visitatori. – rasmeta

0

Il modo più semplice è questa:

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

rootView è il layout principale radice:

<?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> 
Problemi correlati