¿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.
- GridView con selección múltiple no muestra el estado del elemento seleccionado (sólo estado presionado)
- EditText en GridView: Cómo obtener valor de Multiple EditText
- La altura de gridView es demasiado alta cuando se utiliza una imagen
- ¿Cómo obtengo la vista de cuadrícula dinámica android?
- Creación de Gridview con imágenes seleccionables, Android
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?
- Cómo deshacerse de los espacios en gridview
- GridView.setItemChecked (posición, valor)
- ¿Cómo inflar otro diseño dentro de getView () del adaptador gridview en android?
- Cómo crear AsymmetricGridView con diferentes tamaños de imagen en fila
- Cómo hacer una cuadrícula personalizada con imágenes en android?
- Conserve la relación de aspecto de la imagen en el widget de aplicación GridView
- Cómo reemplazar completamente listView / GridView con RecyclerView?
- Implementar algunas funcionalidades como en Instagram android app
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);
- InstallLocation identificador no encontrado en eclipse paquete de Android
- ¿Cuál es la razón del error? El dispositivo admite x86, pero APK sólo admite armeabi-v7a "