2016-08-09 33 views
1

Ich habe eine ImageView. Darunter möchte ich eine GridView mit vielen kleineren Bildern haben. Ich will, dass es ordentlich aussieht ... 4 pro Zeile, mit gleichmäßigem Abstand oben und unten.Ausrichten einer Gridview mit einer anderen Ansicht

Momentan ist der Abstand nicht zu schlecht (auch wenn mein linker Abstand etwas schmaler ist als der Abstand von oben nach unten), aber die Sache, mit der ich wirklich zu kämpfen habe ist der zusätzliche Rand ganz rechts.

Ich möchte, dass die rechte Kante der Bilder in der Rasteransicht perfekt mit der rechten Kante des großen Bildes ausgerichtet ist. Was mache ich falsch? Hier

ist ein Bild von dem, was ich derzeit haben:

enter image description here

Hier ist mein Layout:

 <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 



      <ImageView 
       android:id="@+id/items_image" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/placeholder" 
       android:scaleType="fitStart" 
       android:adjustViewBounds="true" 
       style="@style/ItemsImage" /> 

      <GridView 
       android:id="@+id/items_all_images" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:numColumns="4" 
       android:stretchMode="columnWidth" 
       android:clipToPadding="false" 
       android:scrollbarStyle="outsideOverlay" 


       android:verticalSpacing="20dp" 


       style="@style/ItemsImage" 
       /> 

     </LinearLayout> 

    </LinearLayout> 

Der ItemsImage Stil ist dies:

<style name="ItemsImage"> 
    <item name="android:gravity">top|left</item> 
    <item name="android:layout_gravity">top|left</item> 
    <item name="android:paddingRight">25dp</item> 
</style> 
+0

Ich glaube, dass die Schwerkraft in der Mitte sein sollte, um symmetrische Räume zu haben. –

+0

Danke für Ihre Antwort. Wenn ich das tue, dann habe ich einfach den gleichen Übermaßraum sowohl an der äußersten linken Kante als auch an der äußersten rechten Kante. Ich möchte, dass sich die Kanten gleichmäßig mit dem obigen "ImageView" ausrichten. – b85411

+0

Ich bekomme es, Sie müssen nicht die richtige Auffüllung geben und in XML, Gitterbreite auf Eltern übereinstimmen. –

Antwort

0

Ich weiß nicht, das ist der beste Weg, dies zu tun, aber es kann das Problem lösen. diese Zeilen zu Ihrer Tätigkeit der onCreate Methode hinzufügen:

YOUR_GRIDVIEW.post(new Runnable() 
{ 
    @Override 
    public void run(){ 
    YOUR_GRIDVIEW.setWidth(YOUR_IMAGE.getWidth()); 
    } 
}); 
+0

'GridView' hat keine' setWidth() 'Funktion? Ich sehe nur setColumnWidth – b85411

+0

@ b85411 Dann verwenden Sie die Methode setMinimumWidth – Alikbar

+0

Um ehrlich zu sein, glaube ich nicht, es gibt ein Problem mit der Breite des GridView. Wenn ich ihm einen schwarzen Hintergrund gebe, kann ich sehen, dass es ausgerichtet ist ... aber es scheint, als ob es eine innere Polsterung auf den einzelnen Gegenständen gibt. – b85411

0

fix Breite und Höhe für Gitter definieren und auch für Bild in gridview. Im Code nach der Initialisierung der Rasterinstanz können Sie den Abstand wie folgt festlegen.

GridView gridView; 
int gridWidth = 1280; 
int gridHeight = 500; 
int gridItemWidth = 60; 
int gridItemHeight = 50; 
int gridRows = 3, gridColumns = 4; 
int vSpacing = (gridHeight - (gridItemHeight * gridRows))/gridRows; 
int hSpacing = (gridWidth - (gridItemWidth * gridColumns))/gridColumns; 
gridView.setLayoutParams(new LayoutParams(gridWidth, gridHeight)); 

gridView.setColumnWidth(gridItemWidth); 
gridView.setNumColumns(gridColumns); 

gridView.setHorizontalSpacing(hSpacing); 
gridView.setVerticalSpacing(vSpacing); 

Stellen Sie die Gitterbreite auf die Größe eines großen Bildes oberhalb von GridView ein. Hoffe es hilft dir.