GridView error en el espaciado horizontal

He colocado un GridView en mi archivo de diseño XML.

Se muestra como quería en el inglés (LTR) en ambos API 17-21 Pero cuando he witch el idioma a árabe (RTL) el horizontalSpacing se ignora en la API 17-19, pero en la API 21 se muestra como quería.

El mismo comportamiento se produjo en los emuladores y dispositivos Android reales.

Código XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/services_home_main_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/services_home_contents" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_above="@+id/services_home_bottom_layout"> <GridView android:id="@+id/services_home_services_gridview" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="3" android:horizontalSpacing="4dp" android:verticalSpacing="4dp" android:layout_margin="4dp" android:gravity="center" android:choiceMode="singleChoice" /> </LinearLayout> <LinearLayout android:id="@id/services_home_bottom_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> </RelativeLayout> 

Código XML para los elementos:

 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/services_drawer_item_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:padding="4dp" android:background="@color/Gray_CC" android:drawableTop="@drawable/tall4" android:text="@string/app_name" /> 

Aquí están mis capturas de pantalla de la interfaz de usuario árabe (RTL):

Observe el espaciado horizontal en la primera captura de pantalla

Introduzca aquí la descripción de la imagen

Tuve el mismo problema y traté de resolverlo, pero simplemente no funciona como se esperaba. Si tiene RTL establecido en su manifiesto, establezca la dirección de diseño de GridView a LRT y rotateY por 180.

Aquí está una explicación detallada: los elementos de lugar de vista de cuadrícula de Android de derecha a izquierda

Probar esto, no sé por qué, pero trabajó para mí

 if(activity.getWindow().getDecorView().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) gridView.setHorizontalSpacing((int) -padding); else gridView.setHorizontalSpacing((int) padding); 

El problema se puede solucionar estableciendo android: layoutDirection = "ltr" en el diseño que contiene el GridView y, a continuación, debe crear 2 diseños, uno para RTL y otro para LTR , y comprobar en el adaptador qué tipo debe utilizar.

He intentado este código

En xml:

 android:horizontalSpacing="4dp" 

En java

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)//V.17 { gView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL); if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){ //V.21 gView.setHorizontalSpacing((int) -4); } } 
  • Android - Gridview con Custom BaseAdapter, crear onclicklistener
  • Android Manejo de muchos campos de EditText en un ListView
  • ¿Por qué hay ListVIew en android?
  • Android GridView que hace que los artículos encajen en cada tamaño de pantalla
  • Cuadrícula de imágenes dentro de ScrollView
  • Vista de cuadrícula de Android Cambiar el número de columnas dependiendo de los datos
  • Tire para actualizar en Android sin biblioteca popular
  • Android: cómo crear GridView
  • GridView pointToPosition con espaciado
  • GridView.setOnItemClickListener no funciona
  • GridView ampliable con reciclaje de vistas en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.