2012-07-10 29 views
8

Estoy haciendo una aplicación donde quiero que se llene la vista de la cuadrícula de la derecha a la izquierda "para usarla en los idiomas de derecha a izquierda", traté de hacer que la gravedad gridView fuera a la derecha pero no funcionó ... mi diseño de gridview está debajo.Comience los Elementos GridView desde la derecha

Gracias de antemano

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

Respuesta

4

No creo GridView fue diseñado teniendo en mente idiomas. Es más un componente visual para organizar imágenes en miniatura.

Puede resolver ese problema modificando su adaptador y permitiendo que invierta el orden de cada artículo por fila. Sin embargo, deberá indicarle a su adaptador la cantidad de elementos por fila para que funcione.

Además de eso, si la última fila tiene menos elementos que los posibles, entonces debe introducir elementos vacíos para llenarlos a la izquierda.

+1

En realidad, tiene 'layoutDirection' en cuenta a partir de 4.2. Actualicé mi respuesta con algunos enlaces adicionales a la fuente. – Jelle

+0

Esto fue una buena pista, gracias. En mi aplicación, gridView tiene un número fijo de columnas y de esta manera puedo simular la dirección rtl. –

2

Puede intentar

android:layoutDirection="rtl" 

Por lo general, para el texto y que no sabe cuál es el efecto en un GridView. (ref)

Otra cosa a intentar es

android:stackFromBottom="true" 

Pero no va a funcionar si es necesario pedir los artículos de arriba hacia abajo y de derecha a izquierda (ref)

+0

stackFromBottom fue lo primero que pensé, pero no me ayudó. – user1940676

+0

error: No se ha encontrado ningún identificador de recurso para el atributo 'layoutDirection' en el paquete 'android' –

+0

eliminar esa respuesta –

5

creo su mejor suposición es copiar el código del GridView source y cambiar la medición/diseño para usar de derecha a izquierda.

ACTUALIZACIÓN: La dirección del diseño para las vistas solo se introdujo en el nivel API 17 (4.2). Si compara GridView.java en 4.2 y 4.1, puede ver que, por ejemplo, en el método makeRow(), el layoutDirection se tiene en cuenta desde 4.2, ¡así que debería funcionar!

¿Intentó ejecutar su código con android:layoutDirection="rtl" en API nivel 17?

+0

Sí He intentado con el rtl en la API 17 no funcionó. – user1940676

3

Puede intentar esto. Tenga su GridView en su archivo de diseño tienen el siguiente atributo

android:layoutAnimation="@anim/layout_grid_right_to_left" 

Crear una carpeta anim en donde se agrega el 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" /> 

También añadir fade.xml en la misma carpeta anim con contenidos

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

Estos son solo para su referencia. Por favor, siéntase libre de agregar/eliminar atributos que se ajusten a sus necesidades/requisitos.

2

Usted puede intentar esto para su gridview y todos sus elementos en XML:

android:rotationY="180" 

También puede utilizar android:layoutDirection="rtl".Puede resolver su problema.

+1

ans.gracias perfectas :) – Jas

1

Hay una manera tonta de hacer esto pero funciona a la perfección.

simplemente haga android:ScaleX=-1 en la vista de cuadrícula y en su contenedor de artículos (su vista personalizada para las celdas de la vista de cuadrícula), por lo que su diseño se iniciará de derecha a izquierda.

Espero que esto ayude

+0

lol. funciona, es Android: ScaleX = "- 1" sin embargo. –

Cuestiones relacionadas