Introduction

In this article, we are going to learn about how to create a custom grid view in Xamarin Android

Step 1

Create your Xamarin Android solution in Visual Studio/Xamarin Studio

Step 2
Create a gridview in Main.axml


Step 3
Create a item class that holds name property and resource property
  1. public class Item
  2. {
  3. public string Name { get; set; }
  4. public int Resource { get; set; }
  5. }
Step 4
Create a custom image View that display the image in full view.
  1. public class SquareImageView : ImageView
  2. {
  3. public SquareImageView(Context context, IAttributeSet atrs) : base(context, atrs)
  4. {
  5. }
  6. public SquareImageView(Context context, IAttributeSet atrs, int defStyle) : base(context, atrs, defStyle)
  7. {
  8. }
  9. protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec)
  10. {
  11. base.OnMeasure(widthMeasureSpec, heightMeasureSpec);
  12. SetMeasuredDimension(MeasuredWidth, MeasuredHeight);
  13. }
  14. }
Step 5
Now create a custom layout griditem.axml that fits into the grid view created in Main.axml
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent">
  4. <"your-namespace".SquareImageView
  5. android:id="@+id/picture"
  6. android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. android:scaleType="centerCrop"/>
  9. <TextView
  10. android:id="@+id/text"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:textSize="12dp"
  14. android:gravity="center"
  15. android:layout_gravity="bottom"
  16. android:textColor="@android:color/white"
  17. android:background="#55000000"/>
  18. </FrameLayout>
Step 6
Now create an adapter ImageAdapter class for gridview created in Main.axml. This ImageAdapter inflates griditem.axml and returns the view.
  1. public class ImageAdapter : BaseAdapter
  2. {
  3. private Activity curvedActivity;
  4. private List<Item> mItems;
  5. public ImageAdapter(Activity curvedActivity)
  6. {
  7. this.curvedActivity = curvedActivity;
  8. mItems = new List<Item>();
  9. mItems.Add(new Item { Name = "Red", Resource = Resource.Drawable.sample_3 });
  10. mItems.Add(new Item { Name = "Magenta", Resource = Resource.Drawable.sample_4 });
  11. mItems.Add(new Item { Name = "Dark", Resource = Resource.Drawable.sample_3 });
  12. mItems.Add(new Item { Name = "Green", Resource = Resource.Drawable.sample_3 });
  13. mItems.Add(new Item { Name = "Yellow", Resource = Resource.Drawable.sample_4 });
  14. }
  15. public override int Count => mItems.Count;
  16. // public override int Count => ;
  17. public override Object GetItem(int position)
  18. {
  19. return null;
  20. }
  21. public override long GetItemId(int position)
  22. {
  23. return 0;
  24. }
  25. public override View GetView(int position, View convertView, ViewGroup parent)
  26. {
  27. View v = convertView;
  28. if (v == null)
  29. {
  30. v = curvedActivity.LayoutInflater.Inflate(Resource.Layout.griditem, null);
  31. }
  32. v.FindViewById<ImageView>(Resource.Id.picture).SetImageResource(mItems[position].Resource);
  33. v.FindViewById<TextView>(Resource.Id.text).Text = mItems[position].Name;
  34. return v;
  35. }
  36. }
Step 7
Now we have to set adapter to the gridview created in main.axml
  1. var gridview = FindViewById<GridView>(Resource.Id.gridview);
  2. gridview.Adapter = new ImageAdapter(this);
  3. gridview.ItemClick += delegate (object sender, AdapterView.ItemClickEventArgs args)
  4. {
  5. Toast.MakeText(this, args.Position.ToString(), ToastLength.Short).Show();
  6. };
Step 8
Now run to see the output.