2012-05-23 4 views
5

Ich habe einen GridView-basierten Kalender. Ich habe das folgende XML-Layout mit dem Selektor auf Null gesetzt, also android:listSelector="@null" in Übereinstimmung mit dem Rat, den ich von dieser Seite habe. Jetzt bekomme ich ein paar Pixel breite Streifen rechts neben dem GridView. Warum? Ich habe alles versucht, was ich kann, aber ich nutze es. Hier ist meine XML-Layout:Android GridView Imperfektion, wie Extra-Leerraum auf der rechten Seite zu entfernen

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

      <GridView 
       android:id="@+id/calendar" 
       android:layout_width="fill_parent" 
       android:layout_height="match_parent" 
       android:horizontalSpacing="-1px" 
       android:numColumns="7" 
       android:stretchMode="columnWidth" 
       android:gravity="center" 
       android:verticalSpacing="-1px" 
       android:listSelector="@null" > 

      </GridView> 

     </LinearLayout> 

Was ich erhalte, ist das Bild:

enter image description here

+0

Vielleicht ist das ein Bildlaufleistenproblem? Versuchen Sie, die Sichtbarkeit der Bildlaufleiste auf false festzulegen. – Demonick

+0

Haben Sie versucht, den horizontalen Abstand von -1 zu 0 zu ändern? – matt5784

+1

@Demonick, habe ich versucht, das Bildlaufleiste Problem und es hat nicht funktioniert. Siehe "Dinesh Sharmas Antwort" unten scheint Sinn zu ergeben. – Lukuluba

Antwort

6

Dieser Bereich ist auf eine unvollständige Berechnung für jede Zeile Ihres Rasters zurückzuführen. Zum Beispiel ist Ihre Gerät Breite 320 px und Sie haben 7 Reihen, versuchen Sie jede Berechnung, die 320 px erfüllt. Wenn die Breite jeder Zelle 45,71428571428571 px ist, kann sie nur reduziert werden.

Andere Option

gelten android: Schwerkraft = "center" Eigenschaft in ihr Gitter, so dass Räume gleichmäßig von links nach rechts

geteilt wird
+0

Yah, Sie ändern sind richtig @ Dinesh-Sharma. Im Querformat verschwindet die Lücke fast, was beweist, dass das Problem mit den Bildschirmabmessungen zusammenhängt. Ich habe aber nicht das "android: gravity =" center "" Ding zum arbeiten. Das sieht jedoch eher trivial aus. Vielen Dank! – Lukuluba

+0

Ich versuchte die 'android: gravity =" center "' und 'android: layout_gravity =" center "' Lösungen und sie haben nicht funktioniert. Ich habe eine Kompromisslösung, um die Spaltenbreiten im Code so zu spezifizieren, dass ihre kombinierte Breite größer ist als die Bildschirmbreite des Devince. Dies zwingt die Spalten, den Bildschirm zu füllen, aber die letzte Spalte wird leicht abgeschnitten - nicht sehr gut, wenn Sie einen Rahmen haben, weil die Grenze verschwindet. Das mit ist so angegeben: [link] http://bytecapsule.blogspot.com/2011/08/android-empty-space-to-right-of.html (ByteCapsule) – Lukuluba

0

Versuchen

android:layout_margin="0dp" 
android:padding="0dp" 

Auch verwenden Sie können diesen Raum für die Bildlaufleiste zugewiesen haben.
Und warum haben Sie Ihren vertikalen und horizontalen Abstand mit negativen Werten?

0

hatte ich das gleiche Problem aber in meinem Fall habe ich hatte keine Kontrolle über die GridView Instanz, so dass ich die Spaltenbreite nicht lesen konnte. Nichtsdestotrotz könnte ich seinen Container ableiten.
Dies ist nicht sehr orthodox, aber Sie können die onMeasure Methode überschreiben und ein paar Pixel hinzufügen.
Etwas wie folgt aus:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    final int RIGHT_MARGIN_OVERSIZE_DIP = 6; 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    int width = this.getMeasuredWidth() 
    int overSize = (int)((getResources().getDisplayMetrics().density*RIGHT_MARGIN_OVERSIZE_DIP) + 0.5f); 
    widthMeasureSpec = MeasureSpec.makeMeasureSpec(width + overSize, MeasureSpec.getMode(widthMeasureSpec));   
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
3

in meinem Fall hatte ich horizontalen Abstand als 1 dp

android:horizontalSpacing="1dp" 

so dieses Problem zu lösen Ich habe genau die richtige Polsterung als -1dp

android:paddingRight="-1dp" 

obwohl Ich habe erwartet, auf der linken Seite einen Platz zu bekommen, aber es hat richtig funktioniert

+0

Ich hatte horizontalSpacing = "0dp" und diese Lösung hat mir trotzdem geholfen. Der leere Raum ist weg. –

+1

@Rempelos wenn ich mich richtig erinnere, sollte die Zahl in der paddingRight -horizontalSpacing sein, also wenn du einen horizontalen Abstand von 2dp hast, dann sollte dein paddingRight -2 – Jimmar

+1

@JiMMaR tatsächlich du bist richtig. Ich habe diesen Fall mit meinem verwechselt, wo ich 'horizontalSpacing =" 0dp "' hatte und immer noch der zusätzliche Platz rechts erschien, aber das Hinzufügen von 'paddingRight =" - 1dp "' hat es behoben. – Rempelos

0
grid.setColumnWidth(grid.getColumnWidth()+1); 

Dies wird die aktuelle ColumnWidth erhalten und 1 Pixel dazu hinzufügen. Denken Sie daran, dies nach onCreateView zu verwenden, da das Raster vorher initialisiert werden muss.

Auch Ihre Rasteransicht sollte match_parent (Höhe und Breite) verwenden. Das Bild/Layout in der Spalte sollte auch match_parent sein.

Verwandte Themen