2012-02-03 14 views
5

Come sembra che GridLayout spinga sempre i suoi figli al layout corrispondente alle loro esigenze. per esempio la seguente dichiarazione:GridLayout spinge verso il basso i suoi figli e l'overflow quando viene specificato fill_parent per l'altezza

<?xml version="1.0" encoding="utf-8"?> 
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:columnCount="3" 
    android:orientation="vertical" 
    android:rowCount="4" 
    android:useDefaultMargins="true" > 
... 
    <ImageView 
     android:id="@+id/main_image" 
     android:layout_column="1" 
     android:layout_columnSpan="2" 
     android:layout_row="3" 
     android:scaleType="fitStart" /> 
</GridLayout> 

Il GridLayout dichiara fill_parent e come tale si aspetterebbe di non troppo pieno. Il GridLayout dovrebbe prendere la dimensione del genitore che in questo caso è la finestra (altezza completa). Tuttavia nel visualizzatore di gerarchia GridLayout è impostato come Wrap_content sia per verticale che orizzontale.

In tal modo ImageView (che è un'immagine grande) o qualsiasi visualizzazione di testo verranno spostati per adattarsi a se stessi e, come tali, sovraccaricano il contenitore.

questo può essere visto nel visualizzatore gerarchia dove la vista della griglia contenitore si inserisce il genitore:

container grid view

mentre il trabocco visualizzazione dell'immagine

image view

lettura della documentazione, ho capito c'è bisogno di impostare la gravità. Per quanto posso provare, ho usato tutti i tipi di opzioni di gravità e opzioni di ridimensionamento delle immagini senza molto effetto. Rimuovendo i margini con useDefaultMargins="false" cambia l'overflow del layout che porta il problema verso griglialayout.

La mia domanda segue:

  • È questo un bug o sto utilizzando il GridLayout in modo non corretto
  • Come posso forzare i bambini del GridLayout per soddisfare il loro contenitore e di riempire rimanenti spazi
+0

vedono questo http://developer.android.com/resources/tutorials/views/hello-gridview.html – NagarjunaReddy

+0

Ho questo stesso problema, a meno che io do il primo elemento un'altezza esplicito, ci vuole il intero genitore e spinge il resto della superficie ... – sethro

risposta

0

Il trucco negli altri layout è di dare al primo elemento un android: layout_weight = "1.0" e nulla agli altri elementi. Perché funziona non ne ho idea, ma lo fa. Ecco un semplice XML che mostrava un ImageView, un TextView e un Button. Senza il parametro layout_weight assegnato a ImageView, il testo e il pulsante sono stati spostati verso il basso.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/white" 
    android:orientation="vertical" 
    android:keepScreenOn = "true" > 

    <ImageView 
     android:id="@+id/imageView_surprise" 
     android:layout_width="wrap_content" 
     android:layout_height="0dip" 
     android:scaleType="centerInside" 
     android:contentDescription="@string/accessibility_imageView_surprise" 
     android:layout_weight="1.0" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_gravity="bottom" > 

     <TextView 
      android:id="@+id/textView_message" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textColor="@color/black" 
      android:textSize="24sp" 
      android:gravity="center_horizontal" /> 

     <Button 
      android:id="@+id/button_share" 
      style="@style/button_text" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

</LinearLayout> 
Problemi correlati