2016-03-19 11 views
-1

Ich versuche, eine Rasteransicht mit Miniaturbildern zu füllen. Ich bin nicht in der Lage, die untergeordneten Elemente zu zentrieren, und eine Nichtübereinstimmung tritt auf, wenn die Bildausrichtung unterschiedlich ist, d. H. Landschaft gegenüber Hochformat. Das Bild zeigt, wie es herauskommt. Ich möchte nicht die Größe der Miniaturansichten ändern, sondern die Textansicht auf derselben Ebene anzeigen und die Bildansicht entsprechend zentrieren.Zentrieren von untergeordneten Elementen in der Rasteransicht

photo gridview with childs not centered

Gridview XML:

<syook.syookfirst.classes.Utils.ExpandableHeightGridView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listview_call_photos" 
     android:layout_marginLeft="2dp" 
     android:layout_marginRight="2dp" 
     android:layout_weight="1" 
     android:nestedScrollingEnabled="true" 
     android:gravity="center" 
     android:layout_gravity="center" 
     android:numColumns="auto_fit"> 

    </syook.syookfirst.classes.Utils.ExpandableHeightGridView> 

ExpandableHeightGridView Klasse:

public class ExpandableHeightGridView extends GridView 
{ 

boolean expanded = false; 

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

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

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

public boolean isExpanded() 
{ 
    return expanded; 
} 

@Override 
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    // HACK! TAKE THAT ANDROID! 
    if (isExpanded()) 
    { 
     // Calculate entire height by providing a very large height hint. 
     // But do not use the highest 2 bits of this integer; those are 
     // reserved for the MeasureSpec mode. 
     int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
     super.onMeasure(widthMeasureSpec, expandSpec); 

     ViewGroup.LayoutParams params = getLayoutParams(); 
     params.height = getMeasuredHeight(); 
    } 
    else 
    { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 

public void setExpanded(boolean expanded) 
{ 
    this.expanded = expanded; 
} 
} 

Gridview Kind Layout:

<?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:orientation="vertical" 
    android:background="@drawable/button_pressed_nocolor_all" 
    android:gravity="center"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/photo_thumb_calldetails" 
    android:padding="5dp" 
    android:layout_gravity="center" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/label_photo_name" 
    android:textSize="12sp" 
    android:layout_gravity="center" 
    android:gravity="center" 
    android:padding="2dp" 
    android:layout_marginBottom="2dp" /> 

Schätzen Sie jede Hilfe zu diesem Thema. Ich habe versucht, nach solchen Problemen zu suchen, konnte sie aber mit keiner der angebotenen Lösungen lösen.

+0

Es sieht für mich wie Ihre Ansicht ist zentriert, aber sie sind nicht die gleiche Größe. Haben Sie versucht, eine feste Höhe für das ImageView wie zB 78dp einzustellen und zu sehen, wie es angezeigt wird? –

+0

Einstellen der Höhe auf 100dp funktioniert. Danke :) –

Antwort

1

Einstellen der Höhe von ImageView auf 100dp funktioniert. Danke :)

+0

Könnten Sie Ihre Frage als beantwortet bitte markieren. –

0

Einfach die feste Breite einstellen und die Schwerkraft auf Mitte stellen. android: layout_width = "8" und android: gravity = "center"

Verwandte Themen