Search code examples
androidlayoutgridviewimagebuttonadaptor

Gridview with layout (imageview + imagebutton) for every value


Is it possible to make a gridview that has instead of a grid of pictures, a grid of pictures with a small imagebutton below every one of them?


Solution

  • Short answer: Yes. You can have an ImageView and an ImageButton in a GridView.

    Long answer:

    You will naturally have to create a custom GridView for that purpose.

    For example:

    Create an XML which will hold the container GridView, say, grid.xml:

    <GridView
        android:id="@+id/gridFriends"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clipChildren="true"
        android:columnWidth="100dp"
        android:fastScrollEnabled="true"
        android:gravity="center"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth" >
    </GridView>
    

    And, to define the contents of the GridView, create another XML layout which will hold the ImageView and the ImageButton. Say, grid_items.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mainContainer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp" >
    
        <FrameLayout
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:gravity="center" >
    
            <ImageView
                android:id="@+id/imgProfilePicture"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:adjustViewBounds="true"
                android:scaleType="centerCrop"
                android:src="@null" />
    
            <ImageButton
                android:id="@+id/imgbtnDemo"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom|center"
                android:background="@null"
                android:gravity="center"
                android:src="@drawable/ic_contact_picture" >
            </ImageButton>
        </FrameLayout>
    
    </RelativeLayout>
    

    Finally, if you are familiar with the concept of custom ListViews, with a few modifications, you will be able to implement a custom GridView too. If you are not familiar with custom ListViews or GridViews, follow this tutorial to see how to create a custom GridView: http://www.coderzheaven.com/2012/02/29/custom-gridview-in-android-a-simple-example/. Or use this Google Search for more tutorials on the same.

    An important point here would be, if you need the ImageButton's to do a function when they are clicked, the onClickListener will need to be setup in the Adapter.