2016-08-09 2 views
1

Es wurde oft in SO gefragt, wie Padding in GridView zu entfernen, aber keine der Antworten für mich arbeiten.Entfernen Sie Padding in GridView

Ich habe eine GridView, und die Anzahl der Spalten und die Gesamtbreite des Rasterlayouts festlegen. Benötigen Sie Artikel mit 66dp x 66dp Größe. Irgendwie sind Gegenstände quadratisch, aber kleiner ist das 66x66 und es gibt eine massive Polsterung um sie herum. Warum?

int zz = .. // number of columns comes from outside 
gridview.setNumColumns(zz); 
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams)gridview.getLayoutParams(); 
linearParams.width=66*zz; 
gridview.setLayoutParams(linearParams); 

<HorizontalScrollView 
    android:id="@+id/horizontalScrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="66dp" 
    android:layout_marginRight="0dp" 
    android:layout_marginLeft="108dp" 
    android:layout_marginBottom="0dp"> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal"> 

     <GridView 
      android:id="@+id/gridView1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="0dp" 
      android:columnWidth="66dp" 
      android:gravity="center" 
      android:horizontalSpacing="0dp" 
      android:scrollbarAlwaysDrawHorizontalTrack="true" 
      android:scrollbarAlwaysDrawVerticalTrack="true" 
      android:scrollbars="horizontal" 
      android:stretchMode="none" 
      android:verticalSpacing="0dp" 
      android:listSelector="@null" 
      android:scaleType="centerCrop"> 

     </GridView> 

    </LinearLayout> 

</HorizontalScrollView> 

Artikel Prototyp

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="66dp" android:layout_height="66dp"> 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="66dp" 
     android:layout_height="66dp" 
     android:padding="0dp" 
     android:background="@android:color/holo_orange_light"/> 

</RelativeLayout> 

Shreen Schuss

enter image description here

Und das Bild: enter image description here

einen Adapter Mit dem Inhalt/Bilder zu laden.

@Override 
public void onBindViewHolder(RatingHolder ratingHolder, int i) { 

    ratingHolder.icon.setImageResource(R.drawable.asdf); 
    //ratingHolder.icon.setAdjustViewBounds(true); 
} 
+0

Welchen Code verwenden Sie, um das Bild zu laden? –

+0

Hinzugefügt den Code unten, mit Adapter sowieso –

Antwort

0

Die ImageView Sie verwenden keine scaleType definiert.

Die Standardeinstellung für eine ImageView ist FIT_CENTER, aber es kann sein, dass das Bild, das Sie verwenden, eine Größe ist, die nicht vollständig in das Ansichtsverhältnis passt.

Sie höchstwahrscheinlich CENTER_CROP brauchen Ihre Bedürfnisse in Aktion

<ImageView 
     android:id="@+id/icon" 
     android:scaleType="centerCrop" 
     android:layout_width="66dp" 
     android:layout_height="66dp" 
     android:padding="0dp" 
     android:background="@android:color/holo_orange_light"/> 

Ein visuelles Beispiel aller ImageView.ScaleType Werte zu erfüllen here

+0

überprüft 'CENTER_CROP' hilft nicht, machen Sie eine Änderung –

+0

Könnten Sie möglicherweise einen Link zu dem Bild, das das Problem verursacht? –

+0

Bild zum Beitrag hinzugefügt –

0

Zuerst finden Sie nicht fill_parent verwenden sollten, wurde es umbenannt worden match_parent.

Zweitens dieser Code:

LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) gridview.getLayoutParams(); 
linearParams.width= 66 * zz; 
gridview.setLayoutParams(linearParams); 

Ist Einstellung im Wesentlichen die Breite Ihres GridView-wrap_content, so tun, dass in Ihrem XML statt. Wenn Sie die Anzahl der Spalten basierend auf der Breite des Bildschirms festlegen, können Sie dies auch viel einfacher tun. Indem Sie entweder die Breite Ihres GridView auf setzen und numColumns auf auto_fit setzen. Oder verwenden Sie eine integers.xml Werte-Ressource und verwenden Sie Ressourcenqualifizierer wie values, values-w600dp und values-w840dp, um eine Ganzzahl für verschiedene Bildschirmbreiten festzulegen.

Als nächstes kann die Einstellung gravity="center" die Ursache für das Problem sein, dass das Attribut versucht, die Ansichten innerhalb Ihrer GridView zu zentrieren.

Schließlich wickeln Sie Ihre Ansichten unnötige Layouts ein. Jede View kann die Basis in Ihrem XML sein, Sie müssen sie nicht in ein "Layout" umbrechen.Ihre GridView sollte wie folgt aussehen:

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/grid_view_1" 
    android:layout_width="wrap_content" android:layout_height="match_parent" 
    android:stretchMode="none" android:numColumns="@integer/column_number"/> 

Und Ihre ImageView wie folgt aus:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/icon" android:layout_width="66dp" android:layout_height="66dp" 
    android:scaleType="centerCrop"/> 

Diese Änderungen nicht sofort Ihr Problem beheben kann, aber sie geben Ihnen etwas ein wenig besser handhabbar zu arbeiten .

+0

Anzahl der Spalte wird nicht basierend auf der Breite des Bildschirms festgelegt, Anzahl der Spalte kommt aus einer anderen Quelle, 'GridView' ist in einem' LinearLayout' typischerweise ist es viel breiter als der Bildschirm. Das Entfernen von 'android: gravity =" center "' hat keine Wirkung. Brauchen Sie 'LinearLayout', weil Sie horizontal' GridView' scrollen möchten. –

+0

@ János Okay, wenn es von woanders ist, können Sie einfach 'gridView.setNumColumns() 'aufrufen, Sie brauchen keinen der anderen Codes, wenn Sie setzen der 'android: layout_width =" wrap_content "'. – Bryan

+0

'GridView' kann vertikal scrollen, aber ich möchte auch horizontal scrollen. Also habe ich in ein 'LinearLayout' gesetzt. Und 'GridView' kann mehr hundert Spalten haben. –

Verwandte Themen