2014-12-31 10 views
7

Ho inserito un GridView nel file di layout XML.Errore GridView nell'intervallo orizzontale

Viene visualizzato come avrei voluto, in lingua inglese (LTR) su entrambi API 17-21 Ma quando ho WITCH la lingua araba (RTL) il horizontalSpacing viene ignorato su API 17-19 ma su API 21 viene visualizzato come volevo.

Lo stesso comportamento si verificava sugli emulatori e sui dispositivi Android reali.

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

codice XML per gli oggetti:

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

Ecco i miei screenshot di arabo (RTL) UI:

Avviso la spaziatura orizzontale nel primo screenshot

enter image description here

risposta

3

Ho avuto lo stesso problema e ho cercato di risolverlo, ma semplicemente non funziona come previsto. Se si dispone di RTL impostato nel vostro manifesta quindi impostare la direzione layout del GridView per LRT e RotateY da 180.

Ecco una spiegazione dettagliata: android grid view place items from right to left

+0

Questo dovrebbe funzionare per GridView solo con l'immagine, ma se c'è del testo potrebbe essere specchiato. Quindi l'elemento Grid deve anche essere ruotato di 180. – darshanz

+0

Ho appena impostato la direzione per 'grid.setLayoutDirection (View.LAYOUT_DIRECTION_LTR)' e ha funzionato. –

4

provare questo, non so perché ma ha funzionato per me

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

lavorato anche per me .....;) – karan

+0

Ma non è corretto ... funziona in meno di 21 ma non in 21 e sopra. crea un problema per 21 e sopra, provando a risolvere con il dispositivo di controllo api – karan

+0

Ho anche riscontrato questo problema quando ho impostato la spaziatura orizzontale in GridView per la direzione RTL. Controllare la direzione del layout e il controllo Api sembra funzionare :). – box

0

Il problema può essere risolto impostando Android: layoutDirection = "ltr" nel layout che contiene il GridView e poi, è necessario creare 2 layout, una per RTL e un altro per LTR, e il check-nella scheda di quale tipo si dovrebbe usare.

-1

Ho provato questo codice

in xml:

android:horizontalSpacing="4dp" 

in 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); 
    } 
}