ImageView占用了太多的垂直空间

时间:2014-09-04 12:04:00

标签: android android-layout

我正在处理一个staggered gridview的项目,该项目可以支持每个嵌套视图的不同高度,

<?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>

正如您在图片中看到的那样,对于宽图像,ImageView占用了太多的垂直空间, 对于狭窄的图片来说,这似乎不是一个问题,  我该如何解决? Vertical Horizontal

4 个答案:

答案 0 :(得分:18)

已经有一段时间了,但对于那些现在处理这类问题的人来说:android:adjustViewBounds="true"应该可以做到这一点!

答案 1 :(得分:1)

我遇到了类似的问题,我通过覆盖onMeasure的{​​{1}}方法解决了这个问题。

RelativeLayout

然后我在XML布局文件中使用了这个类:

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);
    }

}

答案 2 :(得分:0)

Naveen Tamrakar建议, 在StaggeredGridViewDemo中,他们使用“ScaleImageView”类扩展了ImageView 解决了这个问题(不确定问题是什么以及为什么ImageView没有包裹图像,但这就是解决方案)

答案 3 :(得分:-3)

你可以使用ScaleType属性......就像这样:

 android:scaleType="centerCrop"

还有其他几种类型。只需选择最符合您要求的那种。