2010-08-20 29 views
100

Also, ich habe eine Bildansicht, die ein beliebiges Bild anzeigen sollte, ein Profilbild aus dem Internet heruntergeladen. Ich möchte, dass das ImageView sein Bild so skaliert, dass es in die Höhe des übergeordneten Containers passt und eine maximale Breite von 60 dpi hat. Wenn das Bild jedoch relativ groß ist und nicht die volle Breite von 60 dpi benötigt, sollte die Breite des ImageViews verringert werden, damit der Hintergrund der Ansicht eng um das Bild passt.Android Bildansicht nicht MaxWidth respektieren?

ich das versucht,

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

aber, dass das Image super groß aus irgendeinem Grunde gemacht, vielleicht verwendete es die innere Breite des Bildes und wrap_content es zu setzen - wie auch immer, es hätte sie nicht an meine maxWidth Attribut .. Funktioniert das nur in einigen Arten von Containern? Es ist in einem LinearLayout ...

Irgendwelche Vorschläge?

Antwort

259

Ah,

android:adjustViewBounds="true" 

ist erforderlich für maxWidth zu arbeiten.

Funktioniert jetzt!

+0

thx für die gemeinsame Nutzung, können Sie Ihre Antwort als richtig markieren bitte !? – WarrenFaith

+0

dosent arbeiten für mich !! –

+1

Vielen Dank .. Gut für mich gearbeitet :) –

1

adjustViewBounds Einstellung nicht hilft, wenn Sie match_parent verwenden, aber Abhilfe ist einfach benutzerdefinierte 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 scheint mit einer Match_Parent Breite für mich gut zu funktionieren. –