5

questo è il mio primo post. Sto imparando a programmare in Java per le app Android. Sto usando una variabile "LinearLayout" denominata: ll "con un layout_weight predefinito (che voglio modificare ogni volta che voglio in futuro) e l'altezza e la larghezza impostate su MATCH_PARENT. Voglio ottenere l'altezza di questo LinearLayout in pixel. Riempio questo usando java (ll.addView (variableForAnObject);). Sto cercando di ottenere la sua altezza usando ll.getLayoutParams(). Height; ma sto ottenendo -1. Perché credo che questa sia la costante per MATCH_PARENT. Impostando l'altezza su 0 dpi si ottiene l'invisibilità e si ottiene un'altezza pari a 0.Come ottenere l'altezza in pixel di LinearLayout con layout_weight

Per favore dimmi se c'è un modo per ottenere la sua altezza. Penso di poter fare questo ottenendo l'altezza dello schermo usando DisplayMetrics e facendo calcoli quasi impossibili (almeno per me) ma questo sarà troppo complesso.

+0

'll.getLayoutParams(). Height' restituisce uno dei' MATCH_PARENT' o 'WRAP_CONTENT'. il primo è -1 il secondo è -2 – Blackbelt

risposta

9

prova con ll.getHeight() dovrebbe funzionare

in caso contrario, è perché Android non ha ancora ricalcolata suoi limiti, quindi:

//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

'// forse funziona anche height = ll.getLayoutParams(). height; no no – Blackbelt

+0

Grazie mille! un problema che è ancora lì è che ottengo uno 0 alla prima esecuzione. Riempio il layout e faccio molte più cose usando un metodo personalizzato e chiamo questo metodo in OnCreate. Ma alla prima esecuzione ottengo 0, quindi se riempio questo layout usando lo stesso metodo, l'altezza ottiene un valore. Io uso ll.removeAllViews(); prima di riempire il layout. – Usman

+0

@javi Ho provato a mettere direttamente in onCreate così come all'interno del mio metodo (che è all'interno di onCreate) ma ottengo sempre uno 0. Cercherò su questo argomento. – Usman

0

Definisci il tuo LinearLayout nella classe e utilizza getHeight() e getWidth(). Esempio:

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

Spero che sia d'aiuto! :)

0

Dare il campo id nel file XML di layout:

<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>> 

Utilizzare questo id per ottenere riferimento nella classe java e trovare altezza e larghezza:

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

È -1 perchè le sue dimensioni non sono ancora stati fissati, quando si imposta il layout occorre un certo tempo per calcolare i valori effettivi incluso altezza, larghezza ecc

Usa OnLayoutListener ascoltare quando ha terminato con lo schema.

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

Vedi this per di più sulle OnLayoutListener