Android的imageview不尊重maxWidth?


113

因此,我有一个imageview应该显示任意图像,即从Internet下载的个人资料图片。我希望此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中...

有什么建议?

Answers:


302

啊,

android:adjustViewBounds="true"

为使maxWidth工作需要。

现在工作!


谢谢分享,可以将您的答案标记为正确的答案吗?
WarrenFaith

1
非常感谢..对我来说很好:)
Nirav Dangi 2014年

7
并以编程方式:imageView.setAdjustViewBounds(true);
西里尔·提花

7
对于遇到此发现的任何人都行不通,请确保宽度/高度未设置为match_parent。
凯文·沃思

在这里,我一直在窃取AOSP特殊的内部ImageView,据说该ImageView是为了尊重这些界限而创建的。
TheWanderer '18 -10-26

4

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

1
AdjustViewBounds对于我来说具有match_parent宽度似乎可以正常工作。
Cory Petosky 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.