2012-08-15 18 views
11

Mam wysokość ustawioną LinearLayout jako match_parent jak poniżej:Jak zdobyć wysokość LinearLayout

<LinearLayout 
    android:id="@+id/list_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

Chcę uzyskać wysokość tego LinearLayout.
Użyłem poniższy kod:

LinearLayout ll_list = (LinearLayout)findViewById(R.id.list_layout); 
int h = ll_list.getHeight(); 

Ale to zwróci null.
Jak mogę to zrobić?

+0

chyba że masz zamiar mieć zadanie optymalizacji tła bitmap (lub coś podobnego) przed wyświetleniem ich na ekranie, naprawdę nie mogę w danej chwili nic nie potrzebować. Jeśli możesz powiedzieć nam coś więcej na temat Twojej aplikacji, być może będziemy w stanie wskazać ci lepszą alternatywę dla projektu. – Budius

+0

http://stackoverflow.com/a/41705445/5664529 sprawdź to, może ci pomóc. –

Odpowiedz

36

Przede wszystkim: Twój LinearLayout id jest left_layout nie list_layout.

Również, ll_list.getHeight() zwróci 0 (jak również ll_list.getWidth()), jeśli jeszcze nie jest narysowany.

rozwiązaniem byłoby uzyskać wysokość po twój pogląd jest layouted:

ll_list.post(new Runnable(){ 
    public void run(){ 
     int height = ll_list.getHeight(); 
    } 
}); 

I upewnij się, że Twój ll_list jest final.

+0

Jak pozwolić, aby go narysować. – brian

+0

@Brian to nie twój problem. Po prostu upewnij się, że wywołujesz 'getHeight()' po narysowaniu widoku. –

+0

@ brian Podałem przykład –

1
LinearLayout ll_list = (LinearLayout)findViewById(R.id.list_layout); 
                 ^^^^^^^^^^ 
+2

może być wpisany źle w pytaniu. nie skompilowałoby się nawet, gdyby tak było. –

+0

Przepraszamy błąd literówki. Ale wciąż nie jest puste. – brian

+0

zobacz swoją nazwę pliku xml, a także zmień id, a następnie sprawdź go –

-6

wypróbować ten kod:

public static int getViewDimensions(View v,String what){ 
    int result = 0; 
    if (what.equalsIgnoreCase("height")) { 
     result = v.getHeight(); 
    } else { 
     result = v.getWidth(); 
    } 
    return result; 

} 

następnie onBackPressed() można uzyskać szer i wysokość każdej ViewLinear trzeba.

@Override 
public void onBackPressed() { 

    RelativeLayout banner = (RelativeLayout)findViewById(R.id.banner); 

    int h = getViewDimensions(banner, "height"); 
    int w = getViewDimensions(banner, "width"); 

    Log.v("Height*Widht", h +"*"+ w); 

} 
+1

Jakiś powód, dla którego nie sugerujesz po prostu wywoływania banner.getHeight() lub banner.getWidth()? – garlicman

+0

Ponieważ chcę znać wysokość i szerokość wielu widoków, więc stworzyłem powyższą funkcję. –

+0

i chcę również poznać większą wysokość i szerokość różnych widoków zgodnie z wymiarem widoku. –

Powiązane problemy