¿Cómo centrar correctamente GridView?

He estado tratando y probando y no hay tal suerte. He tenido suerte en todas las demás respuestas aquí relacionadas con el centrado GridView y también no hay suerte. Este es mi GridView xml:

 <GridView android:id="@+id/calendar_grid" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="7" android:columnWidth="40dp" android:verticalSpacing="1dp" android:horizontalSpacing="1dp" android:paddingTop="2dp" android:stretchMode="columnWidth" android:layout_gravity="right" android:gravity="right" android:background="#696969" ></GridView> 

He intentado todas las combinaciones que puedo pensar, pero no ha funcionado mucho. Por lo menos no es consistente entre los dispositivos. Esta es una imagen de lo que siempre hace.

Introduzca aquí la descripción de la imagen

Como se puede ver en el lado derecho del GridView, hay espaciado. Trato de cambiar constantemente eso, y casi nunca funciona. Uso de android:stretchMode lo cambia, pero se ensucia el espaciamiento que tengo entre las células, por lo que no está funcionando. El uso de Gravity también falla como se puede ver. He intentado todos los otros valores para él y todavía no cambia nada. Está pegado a la izquierda. También me parece raro que tratando de cambiar el tamaño de android:columnWidth de cualquier cosa menos de 40 que no hace nada tampoco. Y cuando aumento 40 a 45, tampoco cambia nada. Pero cambiarlo a 50 hace que el espacio de la derecha desaparezca. Pero al ponerlo en mi teléfono, el espaciamiento está allí! Salté esto como hace 2 semanas para seguir trabajando en otras cosas, pero parece que todavía tengo que resolver este problema o incluso entender por qué nada de lo que intento funciona.

Si ayuda a alguien a ayudarme aquí también puedo proporcionar el xml para lo que hace que las células. Pero no estoy seguro si importa. Pero aquí está:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/day_num" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="10dp" android:background="#000000" android:height="35dp" android:gravity="center_vertical|center_horizontal" /> </LinearLayout> 

Si ayuda, el padre de GridView es un LinearLayout con esto:

 <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="0" android:gravity="center" > 

También hay un hermano con un peso de 1, pero no creo que debería estar afectando es como el peso de 0 hace que parte establecer su espacio primero.

EDIT :

Así que he seguido jugando con ella, muy molesto, sobre todo porque no muchas personas parecen tener este problema, pero parece que no importa cuán pequeño hago el columnWidth , el GridView apenas se vuelve más pequeño. De hecho, esa misma brecha que ves es lo que se queda hasta que voy a 50dp. Pero cuando voy en el modo de retrato la brecha reaparece, así que la levanto hasta 90dp (intenté debajo de eso, no cambié nada), y se va. Lo extraño es que el GridView no cambia además del relleno de la brecha. Así que podría hacer 200dp, y se vería perfecto en mi pantalla dimen, y cualquier otra pantalla más pequeña. Una vez que voy a una tableta, sospecho que tendría que aumentar más, pero el punto es, este es un comportamiento extraño. ¿Alguien ha encontrado esto?

Es posible que desee poner su GridView dentro de un RelativeLayout y luego establecer la propiedad layout_centerInParent GridView en true . algo como esto:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <GridView android:id="@+id/calendar_grid" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="7" android:columnWidth="40dp" android:verticalSpacing="1dp" android:horizontalSpacing="1dp" android:paddingTop="2dp" android:stretchMode="columnWidth" android:background="#696969" android:layout_centerInParent="true" /> </RelativeLayout> 

RelativeLayout le da mucho mejor control sobre las posiciones de los niños.

Aquí está mi configuración de trabajo:

  <GridView android:id="@+id/gridView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:cacheColorHint="@color/white" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:numColumns="3" android:padding="5dp" android:scrollbars="none" android:stretchMode="columnWidth" android:gravity="center" /> 

Usted necesita fijar la gravedad de la disposición principal de TextView o de LayoutGravity de TextView, Plz cambia el diseño de la célula como sigue:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_vertical|center_horizontal" > <TextView android:id="@+id/day_num" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="10dp" android:background="#000000" android:height="35dp" /> </LinearLayout> 

He encontrado el mismo problema y RelativeLayout con centerInParent tampoco ayudó.

Básicamente, la división puede contener un resto que se cortará de acuerdo con el ancho de la pantalla.

Así, la única manera de centrar el GridView era calcular un ancho que cabría sin resto y utilizar el valor restante como el relleno.

 WindowManager manager = window.getWindowManager(); int screenWidth = manager.getDefaultDisplay().getWidth(); int contentWidth = screenWidth; while( 0 != contentWidth%COLUMN_NUMBER ) contentWidth--; columnWidth = contentWidth / COLUMN_NUMBER; int padding = screenWidth - contentWidth; 

Entonces, cuando cree su GridView:

 gridView.setColumnWidth(columnWidth); gridView.setPadding(padding / 2, 0, padding / 2, 0); 
 There is more specific method to do this. You can define custom layout. And add TextView as the element. Then apply the properties what you want. To center make gravity = center like wise. Then apply that layout as the layout for your grid view. Ex : Sample layout name : myCellitemlayout.xml <TextView> android:id="@+id/text_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" </TextView> Now add this to your gridView adapter. Ex: GridView ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.id.myCellitemlayout, numbers); gridView.setAdapter(adapter); 
  • Vista de cuadrícula de Android Cambiar el número de columnas dependiendo de los datos
  • ¿Puedo evitar las llamadas getView () al medir un GridView?
  • Cómo ejecutar escáner de medios en android
  • Filas de GridView superpuestas: ¿cómo hacer que la altura de la fila encaje en el elemento más alto?
  • Agregar una matriz de botones a un GridView en una aplicación de Android
  • Cómo utilizar setScrollListener en StaggeredGridView
  • Cómo animar una vista para ocultar debajo de otra vista y luego animar desde esa vista
  • Agregar espacio adicional a la parte inferior de un GridView o ListView
  • Android: BaseAdapter y getLayoutInflater en un archivo de clase separado
  • Problema con GridView con ImageViews y TextViews
  • GridView con diferentes tamaños de celdas, estilo pinterest
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.