5

to jest mój pierwszy wpis. Uczę się kodować w języku Java dla aplikacji na Androida. Używam "Zmienna o nazwie: ll" LinearLayout z predefiniowanym layout_weight (który chcę zmienić, kiedy chcę w przyszłości), a wysokość i szerokość ustawione na MATCH_PARENT. Chcę uzyskać wysokość tego LinearLayout w pikselach. Wypełniam to przy pomocy java (ll.addView (variableForAnObject);). Próbuję uzyskać jego wysokość przy użyciu ll.getLayoutParams(). Height; ale otrzymuję -1. Ponieważ uważam, że jest to stała dla MATCH_PARENT. Ustawienie wysokości na 0 dp powoduje niewidoczny poziom ll i daje wzrost jako 0.Jak uzyskać wysokość w pikselach LinearLayout z layout_weight

Proszę mi powiedzieć, czy istnieje sposób na zdobycie jego wysokości. Myślę, że mogę to zrobić, uzyskując wysokość ekranu za pomocą DisplayMetrics i wykonując prawie niemożliwe obliczenia (przynajmniej dla mnie), ale to będzie zbyt skomplikowane.

+0

. pierwsza to -1, druga to -2 – Blackbelt

Odpowiedz

9

spróbuj ll.getHeight() powinien działać

jeśli nie, to dlatego, że android nie został jeszcze calculed swoje granice, a następnie:

//inside of onCreate method should work 
ll.post(new Runnable() { 
    @Override 
    public void run() { 
     //maybe also works height = ll.getLayoutParams().height; 

     height = ll.getHeight(); 

    } 
}); 
+0

'// może także działa wysokość = ll.getLayoutParams(). height;' no it does not – Blackbelt

+0

Wielkie dzięki! Jeden problem, który wciąż istnieje, polega na tym, że otrzymuję 0 przy pierwszym uruchomieniu. Uzupełniam układ i robię znacznie więcej rzeczy za pomocą niestandardowej metody i wywołuję tę metodę w OnCreate. Ale przy pierwszym uruchomieniu otrzymam 0, a jeśli ponownie uzupełnię ten układ, używając tej samej metody, wówczas wysokość otrzyma wartość. Używam ll.removeAllViews(); przed wypełnieniem układu. – Usman

+0

@javi Próbowałem umieścić bezpośrednio naCreate, jak również wewnątrz mojej metody (która jest w środku naCreate), ale zawsze dostaję 0. Będę szukać w tej sprawie. – Usman

0

Zdefiniuj swój LinearLayout w swojej klasie i użyj getHeight() i getWidth(). Przykład:

LinearLayout yourLayout = (LinearLayout) findViewById (R.id.yourLL); 
double height = yourLayout.getHeight(); 
double width = yourLayout.getWidth(); 

Mam nadzieję, że pomoże! :)

0

Daj pole id w pliku xml układ:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:id="@+id/<ID>> 

Użyj tego id, aby uzyskać odniesienie w klasie JAVA i znaleźć wysokość i szerokość:

LinearLayout linearLayout= (LinearLayout) findViewById (R.id.<ID>); 
double height = linearLayout.getHeight(); 
double width = linearLayout.getWidth(); 
3

Jest -1 ponieważ jego wymiary nie zostały jeszcze ustawione, gdy ustawić układ zajmuje trochę czasu, aby obliczyć rzeczywiste wartości w tym wysokość, szerokość itp

Zastosowanie OnLayoutListener słuchać, kiedy to został wykończony Układ.

layout.onLayoutChange (View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
    //Extract values here 
    height = view.getHeight(); 
    width = view.getWidth() 
} 

Zobacz this dłużej o `ll.getLayoutParams(). Height` powraca jedna z` MATCH_PARENT` lub `WRAP_CONTENT` OnLayoutListener

Powiązane problemy