2012-07-10 3 views
8

Sto realizzando un'app in cui voglio che il gridview sia riempito da destra a sinistra "per usarlo per le lingue da destra a sinistra", ho provato a rendere il set di gravità gridView a destra ma non ha funzionato ... il mio layout della griglia è sotto.Avvia GridView Elements da destra

Grazie in anticipo

<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> 

risposta

4

Non credo GridView è stato progettato avendo in mente lingue. È più di un componente visivo per organizzare le immagini in miniatura.

È possibile risolvere questo problema modificando l'adattatore e lasciandolo invertire l'ordine di ogni articolo per riga. Tuttavia, è necessario comunicare all'adattatore la quantità di articoli per riga per farlo funzionare.

Inoltre, se l'ultima riga contiene meno voci di quelle possibili, è necessario introdurre elementi fittizi vuoti per il riempimento a sinistra.

+1

In realtà, prende 'layoutDirection' in considerazione a partire da 4.2. Ho aggiornato la mia risposta con alcuni collegamenti aggiuntivi alla fonte. – Jelle

+0

Questo è stato un buon suggerimento, grazie. Nella mia app il gridView ha un numero fisso di colonne e in questo modo posso simulare la direzione rtl. –

2

Si può provare

android:layoutDirection="rtl" 

Di solito è per il testo e io non so che cosa è l'effetto su un GridView. (ref)

Un'altra cosa da provare è

android:stackFromBottom="true" 

Ma non funzionerà se hai bisogno di ordinare gli articoli top-down e da destra a sinistra (ref)

+0

stackFromBottom è stata la prima cosa a cui stavo pensando, ma non ha aiutato. – user1940676

+0

errore: Nessun identificatore di risorsa trovato per l'attributo 'layoutDirection' nel pacchetto 'android' –

+0

rimuovere quella risposta –

5

credo la tua ipotesi migliore è copiare il codice dallo GridView source e cambiare la misurazione/layout da usare da destra a sinistra.

AGGIORNAMENTO: La direzione di layout per le viste è stata introdotta solo nel livello 17 API (4.2). Se si confronta GridView.java in 4.2 e 4.1, si può vedere che ad esempio nel metodo makeRow(), la direttiva layout è presa in considerazione dal 4.2, quindi dovrebbe funzionare!

Hai provato a eseguire il codice con android:layoutDirection="rtl" al livello API 17?

+0

Sì, ho provato il rtl su api 17 non ha fatto il trucco. – user1940676

3

Si potrebbe provare questo. Avere il GridView nel file di layout avere il seguente attributo

android:layoutAnimation="@anim/layout_grid_right_to_left" 

Creare una cartella anim in cui si aggiunge il layout_grid_right_to_left.xml con 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" /> 

anche aggiungere fade.xml nella stessa cartella anim con contenuti

<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" /> 

Questi sono solo per il vostro riferimento. Non esitate ad aggiungere/rimuovere gli attributi che si adattano alle vostre esigenze/requisiti.

2

Si può provare questo per il GridView e tutti i suoi elementi in XML:

android:rotationY="180" 

È anche possibile utilizzare android:layoutDirection="rtl".Potrebbe risolvere il tuo problema.

+1

perfect ans.thanks :) – Jas

1

C'è un modo stupido per farlo, ma funziona perfettamente.

è sufficiente creare android:ScaleX=-1 in griglia e nel contenitore degli articoli (la vista personalizzata per le celle di visualizzazione griglia), in modo che il layout diventi iniziale da destra a sinistra!

spero che questo aiuto

+0

lol. funziona, è Android: ScaleX = "- 1" però. –