web-dev-qa-db-ja.com

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

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

助言がありますか?

107
juell

あ、

Android:adjustViewBounds="true"

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

今すぐ動作します!

287
juell

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