Tom O
Tom O

Reputation: 1800

GridView auto fit images

im trying to get images displayed in a GridView and get the columns automatically set, so far I've had to manually set the number of columns which is not what i want to do as this will affect how big the images are on different sized screens. I ahve tried setting it to auto_fit but it only displays 2 columns in the middle of the screen. This is what im trying to achieve: (Each red square represents an image)

enter image description here

then when turned to landscape mode i want the columns to auto fit so that its all even. Any help would be much appreciated, thank you :)

Upvotes: 34

Views: 50394

Answers (3)

Piesia
Piesia

Reputation: 185

I'm not sure why someone voted down the answer above me (so I voted it up again): I had to solve a similar problem programatically (with a GridView of ImageView children). Some code removed for clarity:

    int iDisplayWidth = getResources().getDisplayMetrics().widthPixels ;

    iImageWidth = iDisplayWidth
        / iNumberOfColumns ; 
    gridview.setColumnWidth( iImageWidth );
    gridview.setStretchMode( GridView.NO_STRETCH ) ;    
    /* wrap_content in the xml file is supposed to do this, but it didn't seem to work */

Best regards,

Piesia

Upvotes: 13

Vaiden
Vaiden

Reputation: 16122

A better solution is to measure the width programmatically, so you won't end up with a hard-coded column width:

Android: How does GridView auto_fit find the number of columns?

Upvotes: 5

Jeff Gilfelt
Jeff Gilfelt

Reputation: 26149

Experiment with the GridView attributes, specifically android:numColumns="auto_fit" and android:stretchMode. The following works for me:

<GridView 
    android:id="@+id/myGrid"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"    
    android:gravity="center"
/>

Upvotes: 76

Related Questions