2014-09-04 5 views
6

i mit einem staggered gridview an einem Projekt arbeite, die unterschiedliche Höhe für jede verschachtelte Ansicht unterstützen,Image zu viel vertikalen Raum nehmen

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

     <ImageView 
      android:id="@+id/imageView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_launcher" /> 

     <TextView 
      android:id="@+id/textView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 

      android:background="@android:color/holo_blue_light" /> 
    </LinearLayout> 

, wie Sie die Image in den Bildern, für breite Bilder sehen können, nimmt zu viel vertikaler Raum, das scheint kein Problem für schmale Bilder zu sein, Wie kann ich das beheben? VerticalHorizontal

+0

android: scaleType = "fitXY" –

+0

ich versuche nicht, das foto neu zu skalieren oder es zu beschneiden, ich versuche, den whitespace unter und über dem bild loszuwerden, dass der raum ein teil von Imageview ist (ich sage ein Hintergrund dazu, um sicher zu stellen) – user1333057

+0

Warum verwenden Sie diese Ansicht nicht verfügbar in Lib

Antwort

0

als Naveen Tamrakar vorgeschlagen, in StaggeredGridViewDemo erweitert sie Image mit der Klasse „ScaleImageView“ , die das Problem gelöst (nicht wirklich sicher, was das Problem ist und warum Imageview ist nicht umschlingenden das Bild, aber das ist die Lösung)

-3

können Sie die diese ScaleType property..like verwenden:

android:scaleType="centerCrop" 

Es gibt mehrere andere types..just diejenige auswählen, die am besten mit Ihrer Anforderung passt.

+0

keine passt, ich muss ke ep das Bild das gleiche (Verhältnis, keine Zuschneidung) und den vertikalen Whitespace loswerden – user1333057

+0

Sie können es wirklich nicht ohne 'scaleType' tun, es sei denn, wenn Sie möchten, dass die Box die gleiche Form des Bildes (das gleiche Seitenverhältnis) annehmen . –

+0

das ist, was ich wollte – user1333057

1

Ich hatte ein ähnliches Problem und ich löste es durch Überschreiben onMeasure Methode RelativeLayout.

package com.etsy.android.grid.util; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.RelativeLayout; 

public class DynamicHeightRelativeLayout extends RelativeLayout { 

    public DynamicHeightRelativeLayout(Context context) { 
     super(context); 
    } 

    public DynamicHeightRelativeLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public DynamicHeightRelativeLayout(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

     // Hack - This causes the height of RelativeLayout to match 
     //  it's content when RelativeLayout is shown in StaggeredGridView. 
     heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); 

     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 

} 

Dann habe ich diese Klasse in XML-Layout-Datei:

<?xml version="1.0" encoding="utf-8"?> 
<com.etsy.android.grid.util.DynamicHeightRelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:clickable="true" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     ... /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     ... /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     ... /> 

</com.etsy.android.grid.util.DynamicHeightRelativeLayout> 
+1

Würde gerne mehr Punkte zu diesem geben, hat mir sehr geholfen! – MadDeveloper

14

Es ist schon eine Weile her, aber für diejenigen, die mit dieser Art von Problem im Augenblick tun hat: android:adjustViewBounds="true" den Trick tun soll!

+2

Das hat mein Problem gelöst! Danke, musste lange suchen, um das zu finden. Ich habe soeben '' adjustViewBounds = "true" 'zu' ImageView' hinzugefügt. –

+0

So einfach für etwas, das so lange brauchte, um es zu lösen. Vielen Dank! – Whome

Verwandte Themen