2014-12-31 14 views
7

Umieściłem GridView w moim pliku układu XML.Błąd GridView w odstępach poziomych

Jest wyświetlany tak, jak chciałem w języku angielskim (LTR) na obu interfejsach API 17-21 Ale kiedy używam języka na arabski (RTL), horizontalSpacing jest ignorowany w API 17-19, ale na API 21 jest wyświetlany tak jak chciałem.

To samo zachowanie wystąpiło na emulatorach i rzeczywistych urządzeniach z Androidem.

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

kod XML dla przedmiotów:

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

Oto moje screeny arabski (RTL) Ui:

Wskazówka poziome odstępy w pierwszym zrzucie

enter image description here

Odpowiedz

3

miałem ten sam problem i próbowałem go rozwiązać, ale to po prostu nie działa zgodnie z oczekiwaniami. Jeśli masz zestaw RTL w swoim manifeście następnie ustawić kierunek układ GridView do LRT i rotateY przez 180.

Oto szczegółowe wyjaśnienie: android grid view place items from right to left

+0

To powinno działać dla GridView tylko z obrazem, ale jeśli jest też tekst, może on zostać odbity. Tak więc element Grid również musi zostać obrócony o 180. – darshanz

+0

Właśnie ustawiłem kierunek na 'grid.setLayoutDirection (View.LAYOUT_DIRECTION_LTR)' i zadziałało. –

4

spróbować tego, nie wiem dlaczego, ale pracował dla mnie

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

pracował również dla mnie .....;) – karan

+0

Ale to nie jest poprawne ... działa poniżej 21, ale nie w 21 i powyżej. stwarza problem przez 21 i więcej lat, próbując rozwiązać problem z urządzeniem kontrolnym api – karan

+0

Też doświadczyłem tego problemu, gdy ustawiłem poziomy odstęp w GridView dla kierunku RTL. Sprawdzanie kierunku układu i sprawdzania Api wydaje się działać :). – box

0

Problem może być ustalona przez ustawienie android: layoutDirection = „ltr” w układzie, który zawiera GridView a następnie, trzeba utworzyć 2 układy, jeden dla RTL a drugi dla LTR i sprawdzić, w jaki typ karty należy użyć.

-1

Próbowałem ten kod

w xml:

android:horizontalSpacing="4dp" 

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