2012-07-10 10 views
8

Tworzę aplikację, w której chcę, aby gridview był wypełniany od prawej do lewej strony "aby używać go dla języków od prawej do lewej", próbowałem ustawić grawitację gridView na prawą ale to nie zadziałało ... mój układ gridview jest poniżej.Uruchom GridView Elements z prawej

góry dzięki

<RelativeLayout 
    android:id="@+id/grid_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/show_info" 
    android:gravity="right" > 

    <GridView 
     android:id="@+id/channel_grid" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:columnWidth="90dp" 
     android:gravity="right" 
     android:horizontalSpacing="10dp" 
     android:numColumns="auto_fit" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" > 
    </GridView> 
</RelativeLayout> 

Odpowiedz

4

Nie sądzę GridView został zaprojektowany mając na uwadze języków. Jest to bardziej wizualny komponent do układania miniaturek.

Można rozwiązać ten problem, modyfikując adapter i pozwalając mu odwrócić kolejność poszczególnych pozycji w wierszu. W celu wykonania tych czynności należy jednak podać adapterowi liczbę elementów w wierszu.

Co więcej, jeśli w ostatnim rzędzie jest mniej przedmiotów niż jest to możliwe, do wypełnienia po lewej stronie należy wprowadzić puste puste przedmioty.

+1

Właściwie to bierze pod uwagę 'layoutDirection' od 4.2. Zaktualizowałem swoją odpowiedź, dodając kilka dodatkowych linków do źródła. – Jelle

+0

To była dobra wskazówka, dzięki. W mojej aplikacji gridView ma stałą liczbę kolumn iw ten sposób mogę symulować kierunek rtl. –

2

Można spróbować

android:layoutDirection="rtl" 

Zwykle jest dla tekstu i nie wiem co to jest efekt na GridView. (ref)

Inną rzeczą jest, aby spróbować

android:stackFromBottom="true" 

Ale to nie będzie działać, jeśli trzeba zamówić elementy Left Right-to-top-down i (ref)

+0

stackFromBottom był pierwszą rzeczą, o której myślałem, ale to nie pomogło. Błąd – user1940676

+0

: Nie znaleziono identyfikatora zasobu dla atrybutu "layoutDirection" w pakiecie "android" –

+0

usunąć tę odpowiedź –

5

myślę najlepiej jest skopiować kod z GridView source i zmienić pomiar/układ do użycia od prawej do lewej.

AKTUALIZACJA: Kierunek rozmieszczenia widoków wprowadzono tylko na poziomie API 17 (4.2). Jeśli porównać GridView.java w 4.2 i 4.1, można zobaczyć, że na przykład w metodzie makeRow(), layoutDirection jest brana pod uwagę od 4.2, więc powinno działać!

Czy próbowałeś wykonać swój kod za pomocą android:layoutDirection="rtl" na poziomie API 17?

+0

Tak Próbowałem rtl na api 17 to nie załatwiło sprawy. – user1940676

3

Możesz spróbować. Wyraź swoją GridView w pliku layoutu mieć następujący atrybut

android:layoutAnimation="@anim/layout_grid_right_to_left" 

Utwórz folder, anim którym dodasz layout_grid_right_to_left.xml z cotents

<gridLayoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" 
    android:columnDelay="0.5" 
    android:directionPriority="row" 
    android:direction="right_to_left" 
    android:animation="@anim/fade" /> 

także dodać fade.xml w tym samym folderze anim z treścią

<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:fromAlpha="0.0" android:toAlpha="1.0" 
    android:duration="@android:integer/config_longAnimTime" /> 

Służą one wyłącznie celom informacyjnym. Prosimy dodawać/usuwać atrybuty, które odpowiadają Twoim potrzebom/wymaganiom.

2

Można spróbować to dla GridView i wszystkich jego elementów w XML:

android:rotationY="180" 

Można również użyć android:layoutDirection="rtl".To może rozwiązać twój problem.

+1

perfect ans.thanks :) – Jas

1

Jest to głupi sposób, ale działa to doskonale.

Po prostu wykonaj android:ScaleX=-1 w widoku siatki iw kontenerze elementu (Twój niestandardowy widok dla komórek widoku siatki), aby Twój układ zaczął się od prawej do lewej!

nadzieję, że ta pomoc

+0

lol. działa, to Android: ScaleX = "- 1". –