i am working on a project with a staggered gridview that can support varying height for each nested view,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/layout_border"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_blue_light" />
</LinearLayout>
as you can see in the pictures, for wide images the ImageView takes too much vertical space, this seems to not be an issue for narrow pictures, how do i fix this?
It's been a while, but for those who are dealing with this kind of problem right now: android:adjustViewBounds="true"
should do the trick!
I had a similar problem and I resolved it by overriding onMeasure
method of RelativeLayout
.
package com.etsy.android.grid.util;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
public class DynamicHeightRelativeLayout extends RelativeLayout {
public DynamicHeightRelativeLayout(Context context) {
super(context);
}
public DynamicHeightRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DynamicHeightRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// Hack - This causes the height of RelativeLayout to match
// it's content when RelativeLayout is shown in StaggeredGridView.
heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
Then I used this class in XML layout file:
<?xml version="1.0" encoding="utf-8"?>
<com.etsy.android.grid.util.DynamicHeightRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
... />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
... />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
... />
</com.etsy.android.grid.util.DynamicHeightRelativeLayout>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With