I've a list of images in my app that needs to be shown in a Grid layout.. I've tried many ways to set height in Gridview layout, but all went in vain..
After too much of research, I stumbled on the excellent answer of Neil Traft. I just copy-pasted his code in my app and it worked like a charm :)
ExpandableHeightGridView.java:
public class ExpandableHeightGridView extends GridView
{
boolean expanded = false;
public ExpandableHeightGridView(Context context)
{
super(context);
}
public ExpandableHeightGridView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public ExpandableHeightGridView(Context context, AttributeSet attrs,
int defStyle)
{
super(context, attrs, defStyle);
}
public boolean isExpanded()
{
return expanded;
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
// HACK! TAKE THAT ANDROID!
if (isExpanded())
{
// Calculate entire height by providing a very large height hint.
// But do not use the highest 2 bits of this integer; those are
// reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
else
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
public void setExpanded(boolean expanded)
{
this.expanded = expanded;
}
}
embed the GridView inside ScrollView as below,
<ScrollViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"><RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><com.droid.gview.ExpandableHeightGridViewandroid:id="@+id/dashboard_grid"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:horizontalSpacing="2dp"android:isScrollContainer="false"android:numColumns="2"android:stretchMode="columnWidth"android:verticalSpacing="20dp" /></RelativeLayout></ScrollView>
and lastly set the following,
ExpandableHeightGridView gridview = (ExpandableHeightGridView) findViewById(R.id.dashboard_grid);gridview.setExpanded(true);
No comments:
Post a Comment