Android imageviewはmaxWidthを尊重していませんか?


113

だから、私は任意の画像、インターネットからダウンロードしたプロフィール写真を表示するはずの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にあります...

助言がありますか?

回答:


302

あ、

android:adjustViewBounds="true"

maxWidthが機能するために必要です。

今すぐ機能します!


共有のためのTHX、あなたの答えを正しいものとしてマークしてください!?
WarrenFaith 2010

1
おかげでたくさん..私のためにうまくいきました:)
Nirav Dangi '

7
およびプログラム:imageView.setAdjustViewBounds(true);
Cyril Jacquart、2015年

7
この発見に遭遇した場合は機能しないので、width / heightがmatch_parentに設定されていないことを確認してください。
Kevin Worth

そしてここでは、これらの境界を尊重するために作成されたと考えられるAOSPの特別な内部ImageViewを盗んでいます。
TheWanderer 2018年

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.