La visualizzazione delle immagini Android non rispetta la larghezza massima?


113

Quindi, ho una visualizzazione immagine che dovrebbe mostrare un'immagine arbitraria, un'immagine del profilo scaricata da Internet. Voglio che ImageView ridimensiona la sua immagine per adattarla all'altezza del contenitore principale e una larghezza massima impostata di 60dip. Tuttavia, se l'immagine è alta dal punto di vista del rapporto e non necessita dell'intera larghezza di 60, la larghezza di ImageView dovrebbe diminuire in modo che lo sfondo della vista si adatti perfettamente all'immagine.

Ho provato questo

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

ma questo ha reso ImageView super grande per qualche motivo, forse ha usato la larghezza intrinseca dell'immagine e wrap_content per impostarlo - comunque, non ha rispettato il mio attributo maxWidth .. Funziona solo all'interno di alcuni tipi di contenitori? È in un layout lineare ...

Eventuali suggerimenti?

Risposte:


302

ah,

android:adjustViewBounds="true"

è necessario affinché maxWidth funzioni.

Funziona ora!


grazie per la condivisione, puoi contrassegnare la tua risposta come corretta per favore !?
WarrenFaith

1
Grazie mille .. Ha funzionato bene per me :)
Nirav Dangi

7
ea livello di codice: imageView.setAdjustViewBounds (true);
Cyril Jacquart

7
Per chiunque incontri questa scoperta che non funziona, assicurati che larghezza / altezza non siano impostate su match_parent.
Kevin Worth

E qui ho rubato lo speciale ImageView interno di AOSP che sarebbe stato creato per rispettare questi limiti.
TheWanderer

4

L'impostazione adjustViewBoundsnon aiuta se si utilizza match_parent, ma la soluzione alternativa è semplice personalizzata 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 sembra funzionare bene con una larghezza match_parent per me.
Cory Petosky
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.