2010-09-07 16 views
9

Voglio determinare l'altezza e la larghezza disponibili del layout principale a cui devo aggiungere la vista.Android: ottieni l'altezza del layout principale

Ho usato molti metodi su come la layout

  • layout.getHeight()
  • layout.getRootView(). GetHeight()

Tutti questi metodi restituiscono 0 (zero) come il risultato.

Il mio requisito principale è quello di essere in grado di dare larghezza a una vista che è circa il% della larghezza del layout.

Anche io non voglio usare tag per questo. Voglio farlo attraverso il codice.

Grazie in anticipo.

risposta

5

Il problema qui è che si sta tentando di ottenere l'altezza/peso padre prima che il layoutmanager completi il ​​layout principale. È possibile ottenere solo le dimensioni principali, una volta completato il layout.

Il modo consigliato per eseguire ciò che si desidera ottenere è utilizzando il campo layout_weight di LayoutParams. link text

In particolare si dovrebbe usare:

LayoutParams lp = new LinearLayout.LayoutParams(width, height, 
weight); 

valore layout_weight può essere qualsiasi cosa tra 0,0 e 1,0. Così, per esempio se ho myButton all'interno parentLayout, e voglio myButton di occupare il 30% di aspetto di genitore ... vorrei usare qualcosa di simile:

myButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
               LayoutParams.WRAP_CONTENT,0.3)); 

La somma di tutti gli elementi layout_weight bambino dovrebbe essere 1. Inoltre, layout_weight non deve essere utilizzato con la larghezza o l'altezza della vista impostata su LayoutParams.FILL_PARENT.

+0

Ma come ottengo l'altezza e la larghezza del layout principale. ........... LayoutParams lp = new LinearLayout.LayoutParams (larghezza, altezza, peso ); ......... Per dare altezza in% questo metodo è utile solo se ho layout e altezza di layout genitore – Robin

+0

No, non è necessario conoscere la larghezza/altezza esatta del genitore per l'utilizzo di questo metodo. È possibile specificare qualsiasi valore compreso tra 0 e 1 come peso. Ad esempio, se ho myButton all'interno di parentLayout, e voglio che myButton occupi il 30% del layout principale ... Vorrei usare qualcosa come: –

+0

lo spazio dei commenti mi dispiace non è stato sufficiente ... Ho modificato la mia risposta sopra. –

7

Ok. Ho trovato una soluzione. Il modo in cui possiamo ottenere hieght dello schermo in attività è

getApplicationContext(). GetResources(). GetDisplayMetrics(). HeightPixels

Ma io ancora non so come ottenere i Dimensioni in pixel di layout di genitore?

+0

Questo non è sempre lo stesso. Con getApplicationContext(). GetResources(). GetDisplayMetrics(). HeightPixels si ottiene l'altezza dello schermo in pixel. Se si dispone (ad esempio) di una barra azioni, anche la barra delle azioni, qualcosa che probabilmente si desidera evitare se si desidera conoscere l'altezza in pixel di un layout o di un elemento dell'interfaccia utente (sfondo o altro) – Sotti

2

Un'alternativa per implementare programmazione è di utilizzare il metodo seguente:

public void onWindowFocusChanged(boolean b) { ...} 

Con il tempo questo metodo viene richiamato, l'interfaccia grafica-processo è stato finito. In questo modo è possibile ottenere correttamente gli attributi padre.

Come Esempio:

public class A extends Activity { 
    LinearLayout parent; 
    Button child; 
    public void onCreate(Bundle b) { 
     parent = (LinearLayout) findViewById(R.id.linear1); 
     child = (Button) findViewById(R.id.button1); 
     . 
     . 
    } 

@Override 
public void onWindowFocusChanged(boolean b) { 
     LayoutParams lpc = child.getLayoutParams(); 
     lpc.width = parent.getWidth(); 
     child.postInvalidate(); 
     . 
     . 
    } 
} 
0

In OnCreate() metodo, se si utilizza layout.getHeight() e layout.getWidth(), si restituisce 0, invece si possono seguire questa:

public void onClick(View v) { 
    // TODO Auto-generated method stub 

      int layWidth = Layout.getLeft(); 
      int layHeight = Layout.getHeight(); 
     break;  
    } 
+0

Restituisce '0 'perché l'interfaccia utente non ha il tempo di essere visualizzata. Potrebbe essere meglio usare un 'Runnable' dentro 'onCreate' o usare il metodo [' onWindowFocusChanged'] (http://developer.android.com/reference/android/view/View.html#onWindowFocusChanged%28boolean%29) all'interno l'attività come [Robeth] (http://stackoverflow.com/a/10269753/2668136) menzionata, invece di utilizzare un listener di clic per modificare le visualizzazioni. – Fllo

3

provare qualcosa di simile:

view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     view.getHeight(); 
    } 
    }); 
0

Si sta telefonando getHeight() all'inizio. Assicurarsi che getParent().getHeight() venga chiamato dopo viewGroup.addView(view0) e/o setContentView(activity_main.xml). Questo mi è successo in passato e questo l'ha risolto.

Problemi correlati