8

Ich habe eine ImageView und habe seine layout_height auf "100dp" und seine layout_width auf "wrap_content" gesetzt.ImageView adjustViewBounds funktioniert nicht mit Relative Layout

Der verwendete Zeichensatz hat größere tatsächliche Abmessungen, die 130 dpi (Breite) x 215 dpi (Höhe) betragen.

Wenn die ImageView innerhalb eines LinearLayout platziert wird, wenn ich adjustViewBounds auf true gesetzt, es wird eine Breite, die entsprechend dem Seitenverhältnis des ziehbaren und dem layout_width gemessen wird.

Allerdings wird die ImageView, wenn sie in einem platziert wird, die gleiche Breite wie das Zeichen (130dp), unabhängig von den Einstellungen von adjustViewBounds.

In beiden Fällen wird das Bild ohne Verzerrung korrekt wiedergegeben, die Grenzen des ImageView sind jedoch unterschiedlich.

Die RelativeLayout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/background_light"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="100dp" 
     android:adjustViewBounds="true" 
     android:src="@drawable/phone_orange" 
     android:contentDescription="@null" /> 

</RelativeLayout> 

ImageView in Relative Layout

Die Linearlayout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/background_light" 
    android:orientation="vertical" > 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="100dp" 
     android:adjustViewBounds="true" 
     android:contentDescription="@null" 
     android:src="@drawable/phone_orange" /> 

</LinearLayout> 

ImageView in LinearLayout

Warum die ImageView Maßnahmen unterschiedlich in diesen 2 Szenarien? Gibt es eine Möglichkeit, die ImageView Verhalten immer wie im Fall LinearLayout verhalten (wickeln Sie es mit einem LinearLayout funktioniert, aber es ist keine saubere Lösung)?

Antwort

12
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:maxHeight="100dp" 
android:adjustViewBounds="true" 

I got it there

+0

Das Bild match_parent dies verschwindet vollständig mit. – Petrakeas

+0

@Petrakeas Ich aktualisierte Antwort, ich versuchte es in meiner App, es funktioniert gut –

+0

'Android: maxHeight' scheint den Trick zu tun! Aber warum wird es benötigt? Innerhalb LinearLayout funktioniert alles wie erwartet. Ist das Verhalten von RelativeLayout korrekt? – Petrakeas

0

Verwendung Breite und Höhe der Bildansicht

private void addView(Drawable d) { 
    RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT,  RelativeLayout.LayoutParams.MATCH_PARENT); 
    ImageView iv = new ImageView(this); 
    iv.setImageDrawable(d); 
    iv.setAdjustViewBounds(true); 
    iv.setScaleType(ImageView.ScaleType.MATRIX); 
    iv.setLayoutParams(lparams); 
    rl.addView(iv); 
    iv.setOnTouchListener(this); 
} 
Verwandte Themen