maxWidth를 존중하지 않는 Android imageview? 그러나 이미지가 비율 측면에서 길고 전체 60dip

그래서 저는 인터넷에서 다운로드 한 프로필 사진 인 임의의 이미지를 표시해야하는 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에 있습니다 …

어떤 제안?



답변

아,

android:adjustViewBounds="true"

maxWidth가 작동하려면이 필요합니다.

지금 작동합니다!


답변

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