La alineación no es correcta al agregar vista dinámicamente a GridLayout

Cuando los botones agregados por XML – Todo bien

Al agregar botones a XML

<GridLayout android:id="@+id/social_gl_content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:alignmentMode="alignBounds" android:columnCount="2" android:padding="8dp"> <LinearLayout android:layout_width="0dp" android:layout_height="45dp" android:layout_columnWeight="1"> <Button android:layout_width="fill_parent" android:layout_height="45dp" android:background="@android:color/holo_blue_light" android:text="Hi"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="45dp" android:layout_columnWeight="1"> <Button android:layout_width="fill_parent" android:layout_height="45dp" android:background="@android:color/holo_green_light" android:text="Whatsapp"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="45dp" android:layout_columnWeight="1"> <Button android:layout_width="match_parent" android:layout_height="45dp" android:background="@android:color/holo_green_light" android:text="This is facebook" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="45dp" android:layout_columnWeight="1"> <Button android:layout_width="match_parent" android:layout_height="45dp" android:background="@android:color/holo_blue_light" android:text="On" /> </LinearLayout> </GridLayout> 

Cuando se añaden Botones dinámicamente (Por código) – Falta alineación, los botones no ocupan el ancho completo de una columna

 GridLayout gl = (GridLayout) findViewById(R.id.social_gl_content); LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); for (int i = 0 ; i < strs.length ; i++) { View v = inflater.inflate(R.layout.grid_item, null); Button b = (Button) v.findViewById(R.id.button); b.setText(strs[i]); if ( i % 2 ==0) { b.setBackgroundColor(Color.BLACK); }else{ b.setBackgroundColor(Color.BLUE); } gl.addView(v); } 

Introduzca aquí la descripción de la imagen

En lugar de pasar null:

View v = inflater.inflate(R.layout.grid_item, null);

Pase el parentView para que v tenga los parámetros de diseño correctos.

View v = inflater.inflate(R.layout.grid_item, gl, false);

Prueba esto :

 LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); b.setLayoutParams(parms); 
  • No se puede utilizar GridLayout aunque se importó lib de soporte con ActionBarSherlock
  • ¿Cómo puedo incluir la biblioteca de soporte de Android GridLayout en mi proyecto de Android?
  • Android - WrapPanel equivalente?
  • Eclipse dando un error de android.support.v7.widget.GridLayout falló al instanciar
  • SetGravity para GridLayout no funciona
  • Altura dinámica de TextView dentro de un GridLayout
  • Ocultar fila en GridLayout
  • Android, Horizontal y Vertical Scroll para GridLayout
  • Establecer rowSpan o colSpan de un hijo de un GridLayout por programa?
  • GridLayout heterogéneo
  • GridView, GridLayout o TableLayout?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.