2013-10-03 11 views
7

Mam GridView, który wyświetla obrazy alfabetów co się dzieje, za każdym razem w ostatnim wierszu jest mniej liter alfabetu. i ostatni wiersz jest wyrównany do lewej, co nie wygląda dobrze więc chcę zrobić ostatni wiersz, aby być w centrum, Wszelkie sugestieJak ucywilalizować ostatni nierówny rząd w GridView w Androidzie?

Mój kod GridView:

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/grid_view" 
    android:layout_width="fill_parent" 
    android:layout_marginRight="20dp" 
    android:layout_marginTop="20dp" 
    android:layout_height="fill_parent" 
    android:numColumns="auto_fit" 
    android:columnWidth="70dp" 
    android:horizontalSpacing="10dp" 
    android:verticalSpacing="20dp" 
    android:gravity="center" 
    android:stretchMode="spacingWidthUniform" > 

</GridView> 

enter image description here

enter image description here

+0

Wrap obecny adapter ustawić na 'GridView' za pomocą innego adaptera, który wstawi dodatkowe elementy dummy (jeśli to konieczne), aby ostatnie elementy były wyśrodkowane. – Luksprog

+0

@Luksprog: ale żadna z kolumn nie zależy od rozmiaru ekranu, jak mogę obliczyć ile więcej elementów dodać więcej –

+0

Myślę, że mógłbyś użyć 'ViewTreeObserver' i zobaczyć tam ile kolumn używa' GridView' ('getNumColumns() '), a następnie wyzwala zmianę adaptera (w razie potrzeby dodawanie elementów) na podstawie tej wartości. Uważaj, aby nie dostać się w nieskończoną pętlę. – Luksprog

Odpowiedz

-1

Można wycentrować rząd siatki we względnym układzie, a następnie dodać android:layout_centerHorizontal="true" do alfabetu ImageView. Zakładając, że są one ImageView.

więc GridView zostanie owinięty w coś takiego:

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_cotent" 
    android:orientation="horizontal" > 

    <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/grid_view" 
     android:layout_width="fill_parent" 
     android:layout_marginRight="20dp" 
     android:layout_marginTop="20dp" 
     android:layout_height="fill_parent" 
     android:numColumns="auto_fit" 
     android:columnWidth="70dp" 
     android:horizontalSpacing="10dp" 
     android:verticalSpacing="20dp" 
     android:gravity="center" 
     android:stretchMode="spacingWidthUniform" > 

    </GridView> 
</RelativeLayout> 

a poszczególne alfabetu obrazów musiałby android:layout_centerHorizontal="true" takiego:

<ImageView 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_centerHorizontal="true" 
</ImageView> 
0

Mam ten sam problem, ale udało to ja za pomocą dwóch widoków siatki, z pierwszym widokiem siatki wyświetlającym wiersze z wyjątkiem ostatniego wiersza, z drugim widokiem siatki z ostatnim wierszem. To najprostszy sposób na osiągnięcie tego, czego potrzebuję. Nie znalazłem lepszego rozwiązania. Nie mogę się doczekać, aby zobaczyć również ładny i prosty sposób.

+1

jeśli używasz dwóch widoków siatki, to domyślam się, że widok tabeli będzie bardziej przydatny –

0

można spróbować użyć elementy niewidoczne, nie najbardziej efektywne rozwiązanie, ale jest prosty, można umieścić dwa elementy, jeden na początku, jeden na końcu rzędu i uczynić je niewidocznymi