Android imageview不尊重maxWidth?

时间:2010-08-20 11:15:20

标签: android scaling imageview

所以,我有一个imageview应该显示一个任意图像,一个从互联网上下载的个人资料图片。我希望ImageView能够缩放其图像以适应父容器的高度,并设置最大宽度为60dip。但是,如果图像比例高,并且不需要宽度的整个60dip,则ImageView的宽度应该减小,以便视图的背景紧贴图像。

我试过了,

<ImageView android:id="@+id/menu_profile_picture"
    android:layout_width="wrap_content"
    android:maxWidth="60dip"
    android:layout_height="fill_parent"
    android:layout_marginLeft="2dip"
    android:padding="4dip"
    android:scaleType="centerInside"
    android:background="@drawable/menubar_button"
    android:layout_centerVertical="true"/>

但由于某些原因,这使得ImageView超大,也许它使用了图像的固有宽度和wrap_content来设置它 - 无论如何,它不尊重我的maxWidth属性..这只适用于某些类型的容器?它在LinearLayout中......

有什么建议吗?

2 个答案:

答案 0 :(得分:285)

啊,

android:adjustViewBounds="true"
maxWidth需要

才能工作。

立即行动!

答案 1 :(得分:2)

如果您使用adjustViewBounds,则设置match_parent无效,但解决方法是简单的自定义ImageView


public class LimitedWidthImageView extends ImageView {
    public LimitedWidthImageView(Context context) {
        super(context);
    }

    public LimitedWidthImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LimitedWidthImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int specWidth = MeasureSpec.getSize(widthMeasureSpec);
        int maxWidth = getMaxWidth();
        if (specWidth > maxWidth) {
            widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth,
                    MeasureSpec.getMode(widthMeasureSpec));
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}