2013-01-21 1 views
5

Sto utilizzando un semplice GridLayout a cui aggiungo i pulsanti in modo dinamico.SetGravity per GridLayout non funziona

<GridLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tagGridLayout" 
android:background="@color/white" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:columnCount="3" 
> 
</GridLayout> 

e sto usando questo codice Java per riempire la mia griglia che è tutto lavorare bene, tranne che l'opzione set di gravità non fa nulla. Ho provato a cambiare layout_width in diversi tipi nel file XML, aggiungendo gravità allo GridLayout ecc. Come menzionato in altre soluzioni su questo sito. Un'altra cosa da notare è che sto facendo questo in un task Async all'interno di un Fragment. Fondamentalmente voglio ottenere ciò che layout_gravity="fill_horizontal" raggiunge nell'XML.

tagButtons = new Button[trendingTagsCount]; 
     for(int i=0;i<trendingTagsCount;i++) 
     { 
      tagButtons[i] = new Button(getActivity()); 
      //tagButtons[i].setLayoutParams(new LayoutParams(Gravity.FILL_HORIZONTAL)); 
      tagButtons[i].setText(getTagsList.get(i).tag); 
      tagButtons[i].setGravity(Gravity.FILL_HORIZONTAL); 
      tagButtonGrid.addView(tagButtons[i]); 
     } 
+0

Ancora non ho trovato la risposta anche se ho gestito un compromesso utilizzando button.setMaxWidth() e lo stesso per Altezza. – RaWa

+0

puoi fare qualcosa di simile ... LayoutParam param; lp = (LayoutParams) tagButtons [i] .getLayoutParams(); lp.gravity = Gravity.FILL_HORIZONTAL; tagButtons [i] .setLayoutParams (lp); –

risposta

3

Come Karan Mer ha dichiarato di impostare Gravità layout con GridLayout.LayoutParams.

Ma attenzione, in GridLayout è necessario impostare la columnSpec/rowSpec dei bambini (nel tuo caso il pulsante) prima:

param.columnSpec = GridLayout.spec(0); 
param.rowSpec = GridLayout.spec(0); 

e solo allora

param.setGravity(Gravity.RIGHT); 

se columnSpec/rowSpec è indefinito quando si fanno setGravity, la gravità non funziona ...

Anche se si fa:

param.setGravity(Gravity.RIGHT); 
param.columnSpec = GridLayout.spec(0); 
param.rowSpec = GridLayout.spec(0); 

gravità non funziona ...

Il modo giusto è:

param.columnSpec = GridLayout.spec(0); 
param.rowSpec = GridLayout.spec(0); 
param.setGravity(Gravity.RIGHT); 

Non so se è un bug o una cosa voluta. (Sto usando Android API 19)