2013-01-21 19 views
5

Używam prostego GridLayout, do którego dodam przyciski dynamicznie.SetGravity dla GridLayout nie działa

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

i używam tego kodu Java, aby wypełnić mój siatkę, która jest wszystko działa dobrze z tym, że opcja zestaw Gravity nic nie robi. Próbowałem - zmieniając szerokość layout_width na różne typy w pliku XML, dodając grawitację do GridLayout itp., Jak wspomniano w innych rozwiązaniach na tej stronie. Inną rzeczą, na którą należy zwrócić uwagę, jest to, że robię to w zadaniu asynchronicznym wewnątrz fragmentu. Zasadniczo chcę osiągnąć to, co osiąga layout_gravity="fill_horizontal" w 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

Nadal nie znalazłem odpowiedzi, chociaż udało mi się osiągnąć kompromis za pomocą przycisku button.setMaxWidth() i tego samego dla wysokości. – RaWa

+0

możesz zrobić coś takiego ... LayoutParams param; lp = (LayoutParams) tagButtons [i] .getLayoutParams(); lp.gravity = Gravity.FILL_HORIZONTAL; tagButtons [i] .setLayoutParams (lp); –

Odpowiedz

3

Jako, że Karan Mer powiedział, że ustawiłeś Grawitację układu za pomocą GridLayout.LayoutParams.

Ale uważaj, w GridLayout trzeba ustawić columnSpec/rowSpec z dzieci (w przypadku przycisku) przed:

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

a dopiero potem

param.setGravity(Gravity.RIGHT); 

jeśli columnSpec/Parametr rowSpec jest UNDEFINED, gdy ustawisz Gravity, gravity nie działa ...

Nawet jeśli wykonasz:

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

Grawitacja nie działa ...

Prawo sposobem jest:

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

Nie wiem czy to bug czy celowe rzeczą. (Używam Androida API 19)