Android imageview không tôn trọng maxWidth?


113

Vì vậy, tôi có một chế độ xem hình ảnh sẽ hiển thị một hình ảnh tùy ý, một hình ảnh hồ sơ được tải xuống từ internet. Tôi muốn ImageView này chia tỷ lệ hình ảnh của nó để vừa với chiều cao của vùng chứa mẹ và chiều rộng tối đa được đặt là 60dip. Tuy nhiên, nếu hình ảnh có tỷ lệ cao và không cần chiều rộng 60dip đầy đủ, chiều rộng của ImageView sẽ giảm để nền của chế độ xem vừa khít xung quanh hình ảnh.

Tôi đã thử cái này,

<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"/>

nhưng điều đó làm cho ImageView trở nên siêu lớn vì một số lý do, có thể nó đã sử dụng chiều rộng nội tại của hình ảnh và wrap_content để đặt nó - dù sao thì, nó không tôn trọng thuộc tính maxWidth của tôi .. Điều đó chỉ hoạt động bên trong một số loại vùng chứa? Nó nằm trong LinearLayout ...

Bất kỳ đề xuất?

Câu trả lời:


302

Ah,

android:adjustViewBounds="true"

là bắt buộc để maxWidth hoạt động.

Hoạt động ngay bây giờ!


Thx để chia sẻ, bạn có thể đánh dấu câu trả lời của mình là đúng không !?
WarrenFaith

1
Cảm ơn rất nhiều .. Làm việc tốt cho tôi :)
Nirav Dangi

7
và lập trình: imageView.setAdjustViewBounds (true);
Cyril Jacquart

7
Đối với bất kỳ ai gặp phải kết quả này, nó không hoạt động, hãy đảm bảo rằng chiều rộng / chiều cao không được đặt thành match_parent.
Kevin Worth

Và ở đây tôi đã đánh cắp ImageView nội bộ đặc biệt của AOSP được cho là được tạo ra để tôn trọng những giới hạn này.
TheWanderer

4

Cài đặt adjustViewBoundskhông hữu ích nếu bạn sử dụng match_parent, nhưng cách giải quyết là tùy chỉnh đơn giản 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
điều chỉnhViewBounds dường như hoạt động tốt với chiều rộng match_parent đối với tôi.
Cory Petosky
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.