Partager via


Xamarin.Android GridView

GridView est unViewGroup qui affiche les éléments dans une grille à défilement à deux dimensions. Les éléments de grille sont automatiquement insérés dans la disposition à l’aide d’un ListAdapter.

Dans ce tutoriel, vous allez créer une grille de miniatures d’images. Lorsqu’un élément est sélectionné, un message toast affiche la position de l’image.

Démarrez un nouveau projet nommé HelloGridView.

Recherchez des photos que vous souhaitez utiliser, ou téléchargez ces exemples d’images. Ajoutez les fichiers image au répertoire Resources/Drawable du projet. Dans la fenêtre Propriétés , définissez l’action de génération pour chaque sur AndroidResource.

Ouvrez le fichier Resources/Layout/Main.axml et insérez les éléments suivants :

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

Cela GridView remplira l’intégralité de l’écran. Les attributs sont plutôt explicites. Pour plus d’informations sur les attributs valides, consultez la GridView référence.

Ouvrez HelloGridView.cs et insérez le code suivant pour leMéthode OnCreate() :

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    SetContentView (Resource.Layout.Main);

    var gridview = FindViewById<GridView> (Resource.Id.gridview);
    gridview.Adapter = new ImageAdapter (this);

    gridview.ItemClick += delegate (object sender, AdapterView.ItemClickEventArgs args) {
        Toast.MakeText (this, args.Position.ToString (), ToastLength.Short).Show ();
    };
}

Une fois la disposition Main.axml définie pour l’affichage de contenu, est GridView capturé à partir de la disposition avec FindViewById. TheAdapter la propriété est ensuite utilisée pour définir un adaptateur personnalisé (ImageAdapter) comme source de tous les éléments à afficher dans la grille. le ImageAdapter est créé à l’étape suivante.

Pour effectuer une action lorsque l’utilisateur clique sur un élément de la grille, un délégué anonyme est abonné à l’événement ItemClick . Il montre un Toast qui affiche la position d’index (base zéro) de l’élément sélectionné (dans un scénario réel, la position peut être utilisée pour obtenir l’image de taille complète pour une autre tâche). Notez que les classes d’écouteur de style Java peuvent être utilisées à la place d’événements .NET.

Créez une classe appelée ImageAdapter qui sous-classes BaseAdapter:

public class ImageAdapter : BaseAdapter
{
    Context context;

    public ImageAdapter (Context c)
    {
        context = c;
    }

    public override int Count {
        get { return thumbIds.Length; }
    }

    public override Java.Lang.Object GetItem (int position)
    {
        return null;
    }

    public override long GetItemId (int position)
    {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public override View GetView (int position, View convertView, ViewGroup parent)
    {
        ImageView imageView;

        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView (context);
            imageView.LayoutParameters = new GridView.LayoutParams (85, 85);
            imageView.SetScaleType (ImageView.ScaleType.CenterCrop);
            imageView.SetPadding (8, 8, 8, 8);
        } else {
            imageView = (ImageView)convertView;
        }

        imageView.SetImageResource (thumbIds[position]);
        return imageView;
    }

    // references to our images
    int[] thumbIds = {
        Resource.Drawable.sample_2, Resource.Drawable.sample_3,
        Resource.Drawable.sample_4, Resource.Drawable.sample_5,
        Resource.Drawable.sample_6, Resource.Drawable.sample_7,
        Resource.Drawable.sample_0, Resource.Drawable.sample_1,
        Resource.Drawable.sample_2, Resource.Drawable.sample_3,
        Resource.Drawable.sample_4, Resource.Drawable.sample_5,
        Resource.Drawable.sample_6, Resource.Drawable.sample_7,
        Resource.Drawable.sample_0, Resource.Drawable.sample_1,
        Resource.Drawable.sample_2, Resource.Drawable.sample_3,
        Resource.Drawable.sample_4, Resource.Drawable.sample_5,
        Resource.Drawable.sample_6, Resource.Drawable.sample_7
    };
}

Tout d’abord, cela implémente certaines méthodes requises héritées de BaseAdapter. Le constructeur et la Count propriété sont explicites. NormalementGetItem(int) doit retourner l’objet réel à la position spécifiée dans l’adaptateur, mais il est ignoré pour cet exemple. ÉgalementGetItemId(int) doit retourner l’ID de ligne de l’élément, mais il n’est pas nécessaire ici.

La première méthode nécessaire est GetView(). Cette méthode crée un nouveauViewpour chaque image ajoutée à .ImageAdapter Lorsque cela est appelé, unViewest passé, qui est normalement un objet recyclé (au moins après avoir été appelé une fois), il existe donc une case activée pour voir si l’objet est null. S’il est null, unImageView est instancié et configuré avec les propriétés souhaitées pour la présentation de l’image :

  • LayoutParams définit la hauteur et la largeur de l’affichage, ce qui garantit que, quelle que soit la taille du dessinable, chaque image est redimensionnée et rognée pour tenir dans ces dimensions, le cas échéant.

  • SetScaleType() déclare que les images doivent être rognées vers le centre (si nécessaire).

  • SetPadding(int, int, int, int) définit le remplissage pour tous les côtés. (Notez que, si les images ont des proportions différentes, moins de remplissage entraîne un rognage plus important de l’image si elle ne correspond pas aux dimensions données à l’ImageView.)

Si passé View à n’estGetView() pas null, le localImageView est initialisé avec l’objet recyclé View .

À la fin de laGetView() , l’entier position passé dans la méthode est utilisé pour sélectionner une image dans le thumbIds tableau, qui est défini comme ressource d’image pour le ImageView.

Il ne vous reste plus qu’à définir le thumbIds tableau des ressources pouvant être dessinées.

Exécutez l’application. Votre disposition de grille doit ressembler à ceci :

Exemple de capture d’écran de GridView affichant 15 images

Essayez d’expérimenter les comportements de et GridViewImageView en ajustant leurs propriétés. Par exemple, au lieu d’utiliser LayoutParams , essayez d’utiliser SetAdjustViewBounds().

Références

Les parties de cette page sont des modifications basées sur le travail créé et partagé par le projet Open Source Android et utilisé selon les termes décrits dans la licence d’attribution Creative Commons 2.5.