Imageview Android tidak menghormati maxWidth?

113

Jadi, saya memiliki imageview yang seharusnya menampilkan gambar sewenang-wenang, gambar profil yang diunduh dari internet. Saya ingin ini ImageView untuk menskalakan gambarnya agar sesuai dengan tinggi wadah induk, dan lebar maksimal 60dip. Namun, jika gambarnya tinggi berdasarkan rasio, dan tidak membutuhkan lebar 60dip penuh, lebar ImageView harus dikurangi sehingga latar belakang tampilan pas di sekitar gambar.

Saya mencoba ini,

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

tapi itu membuat ImageView menjadi sangat besar karena suatu alasan, mungkin itu menggunakan lebar intrinsik dari gambar dan wrap_content untuk menyetelnya - bagaimanapun, itu tidak menghormati atribut maxWidth saya .. Apakah itu hanya bekerja di dalam beberapa jenis wadah? Ada di LinearLayout ...

Ada saran?

juell
sumber

Jawaban:

302

Ah,

android:adjustViewBounds="true"

diperlukan agar maxWidth berfungsi.

Bekerja sekarang!

juell
sumber
Terima kasih sudah berbagi, bisakah Anda menandai jawaban Anda sebagai jawaban yang benar !?
WarrenFaith
1
Terima kasih Banyak .. Bekerja dengan baik untuk saya :)
Nirav Dangi
7
dan secara terprogram: imageView.setAdjustViewBounds (true);
Cyril Jacquart
7
Bagi siapa pun yang menemukan ini tidak berfungsi, pastikan lebar / tinggi tidak disetel ke match_parent.
Kevin Layak
Dan di sini saya telah mencuri ImageView internal khusus AOSP yang seharusnya dibuat untuk menghormati batasan ini.
TheWanderer
4

Pengaturan adjustViewBoundstidak membantu jika Anda menggunakan match_parent, tetapi solusinya adalah kustom sederhana 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);
    }
}
Merasa baik
sumber
1
adjustViewBounds tampaknya berfungsi dengan baik dengan lebar match_parent untuk saya.
Cory Petosky