Comment faire pour forcer le GridView pour générer des cellules carrées dans Android
Comment puis-je forcer android GridView pour générer des cellules carrées (de la Cellule à la hauteur égale à la cellule de largeur)
GridView a 10*9 cellules et l'application doit prendre en charge plusieurs écrans !
J'ai utilisé un Linéaire de la Mise en page:
row_grid.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp" >
<ImageView
android:id="@+id/item_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher" >
</ImageView>
</LinearLayout>
et GridView:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/katy" >
<GridView
android:id="@+id/gridView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:horizontalSpacing="0dp"
android:numColumns="4"
android:stretchMode="columnWidth"
android:verticalSpacing="0dp" >
</GridView>
</RelativeLayout>
Chaque cellule de la GridView contient une image qui a la même largeur et la hauteur.
les images sont plus grandes que les cellules et doit s'étirer pour s'adapter dans les cellules.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous allez avoir à créer une Vue personnalisée de classe que vous pouvez utiliser à la place de la valeur par défaut LinearLayout que vous utilisez. Alors vous voulez remplacer la Vue onMeasure appel, et le forcer à être carré:
Ensuite, vous pouvez modifier votre row_grid.xml fichier:
Assurez-vous de changer de voie".d'.élément" pour le paquet, où votre GridViewItem.java classe réside.
J'ai également supprimé de votre LinearLayout parent car il ne faisait rien pour vous.
Edit:
Également changé scaleType de fitXY à centerCrop de sorte que votre image n'est pas de s'étirer lui-même et conserve ses proportions. Et, tant que c'est une image carrée, rien ne doit être recadrée, peu importe.
Vous pouvez Remplacer votre disposition linéaire
ensuite l'utiliser dans le item_grid.xml
Fonctionne très bien, merci! Une petite amélioration, je serait toujours choisir la valeur la plus petite, pour prévenir le dépassement de l'écran:
Si votre grille de point juste une image, puis la réponse est très bon. Mais vous voulez ajouter plusieurs éléments dans votre affichage de la grille ensuite, vous devez créer Votre Custom GridViewItem l'extension de la mise en page que vous voulez votre grille de point de l'être. Par exemple dans mon cas, j'ai eu RelativeLayout que la vue parent j'ai donc créé GridViewItem l'extension de la RelativeLayout et cela a fonctionné parfaitement.
Assurez-vous que vos images sont carrées. Et le récipient wrap_content.