2012-04-16 8 views
7

Mam arabską Android aplikację, a tutaj jest kod XML:android: grawitacja = „right” nie działa na wszystkich urządzeniach dla arabskiego i innych języków RTL

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/greygradientbackground"> 
<ImageView android:id="@+id/logo" 
    android:layout_width="150dp" 
    android:layout_height="fill_parent" 
    android:scaleType="centerCrop" 
    android:layout_margin="5dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" /> 
<TextView android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="16sp" 
    android:textColor="#000000" 
    android:layout_gravity="center_vertical|right" 
    android:gravity="right" 
    android:layout_toLeftOf="@id/logo"/> 
</RelativeLayout> 

Problemem jest to, że Android: grawitacja działa na niektórych modelach Androida, a na innych nie.

Aby być bardziej szczegółowym, testowałem aplikację na wielu urządzeniach z Androidem 2.3.3 i tekst arabski jest wyrównany do prawej. Jednak na innych urządzeniach 2.3.3 tekst arabski jest wyrównany w lewo (co jest błędne).

Kiedy zmieniłem Androida: gravity = "right" na android: gravity = "left" problem przesunięty z drugiej grupy urządzeń na pierwszą.

Moje pytanie brzmi: w jaki sposób mogę rozwiązać ten problem, szczególnie, o ile wiem, nie ma sposobu na zlokalizowanie układów na podstawie numeru modelu urządzenia.

Z góry dziękuję za wskazówki, ponieważ jestem całkowicie zagubiony. :(

UPDATE:

Szukałem na temat „Jak wyrównać arabsku poprawnie we wszystkich wersjach Androida?”, Ale nic nie znaleźli pracy na wszystkich moich urządzeń testujących Wszelkie sugestie prosimy Jestem pewien, że jest najlepszy.? podejście praktyka do wyrównywania tekstu arabskiego na Android

UPDATE 2:.

próbowałem użyć WebView zamiast TextView wyrównać arabski poprawnie przy użyciu stylów CSS jednak tekst arabski jest wyświetlana w WebVi. jak dziwne postacie.

Oto kod:

mWebView.loadData("<html dir=\"rtl\">الأسم<body></body></html>", "text/html", "UTF-8"); 

Najdziwniejsze jest to, że strony internetowe arabski tekst jest wyświetlany poprawnie. Więc w czym problem? :(

+0

Wszelkie odpowiedzi lub pomoc? –

+0

Witam, ja też mam ten problem w wersjach 3.x i wyższych. Czy ktoś może zaproponować odpowiedź na to pytanie? – Raj

Odpowiedz

0

zmienić textveiw w układzie do tego ....

<TextView android:id="@+id/title" 

zmiana Twój layout_width do "fill_parent"

 android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="16sp" 
    android:textColor="#000000" 
    android:layout_gravity="center_vertical|right" 
    android:gravity="right" 
    android:layout_toLeftOf="@id/logo" 
/> 

Można zmienić coś w inny sposób również .. ... Możesz dokonać zmian w klasie aktywności ... jak następuje ... pozwól, aby twój tekst z tytułem ID był odwzorowany w klasie aktywności za pomocą obiektu TextView o nazwie "tv", który możesz wyrównać do prawej strony, pisząc to.

tv.setGravity(Gravity.RIGHT); 

, ale w obu przypadkach szerokość układu szerokości powinna wynosić "fill_parent" .. Jeśli tego nie zrobisz i zachować "wrap_content", to nie ma miejsca na ruch tekstu ... wszystkie linie trasowania (center, left, right ...) pozostają takie same .....

Jeśli oba te donotki działają ... wtedy wolałbym użyć układu tabeli i zachować w nim widok tekstowy ... .

+0

Witaj Sagar, dzięki za powtórkę. Próbowałem już tego i nie działa on na tabletach z Androidem 3.1. jeśli podaję grawitację jako Prawą, to przyjdzie po lewej stronie. i jeśli dam grawitację w lewo, jej przybycie po prawej stronie. ale inne urządzenia z OS v4.o i wszystkie działają dobrze. – Raj

+0

@Sagar Dzięki za pomoc. Niestety nie zadziałało. :( –

0

spróbować oddanie TextView wewnątrz oddzielnej LinearLayout oraz zestaw że układy właściwości dużej litery: android: layout_gravity = "center_vertical" i Android: Orientację = "pionowym" android: grawitacji = "right"

dopiskiem: nie określaj layout_gravity widoku tekstowego.

mam nadzieję, że to pomoże! to działało dobrze dla mnie.

również można spróbować rozwiązanie przedstawione tutaj: Android Arabic text aligment

4

Jest to oczekiwane zachowanie. Użytkownik nie może używać gravity="right", ale gravity="end" zamiast tę samą ideę można zastosować do gravity="left" których można użyć gravity="start", jak również layout_marginStart zamiast layout_marginLeft

ten sposób Android będzie można umieścić tekst do orientacji „start”, w zależności od na miejscu. (Dla nas, Amerykanów, my rozpocząć napisać z lewo i kończymy na prawej, ale Arabians rozpoczęcia z prawo i końcowego na lewo).

Można dostać kierunki układ/tekst za pomocą metody getLayoutDirectionFromLocale(null), będzie to powrót View.LAYOUT_DIRECTION_LTR (lewy-prawy) lub View.LAYOUT_DIRECTION_RTL (od prawej do lewej, jak arabska).

Więcej informacji można sprawdzić here

0

Innym rozwiązaniem w celu osiągnięcia takiego zachowania:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layoutDirection="ltr"   
     android:layout_weight="1" 
     android:gravity="end" 
     android:padding="16dp" 
     android:text="@string/locale_switch_btn" /> 
</LinearLayout> 

zauważyć, że dla prawidłowego grawitacji = "end" wyrównanie, w lokalizacjach RTL należy ustawić właściwość:

android: layoutDirection = "ltr"

Powiązane problemy