8

Salam.Czy błąd Androida w rozkładzie "layout-ldltr" w stosunku do "layout-ldrtl" po zmianie orientacji?

W moim projekcie mam do tworzenia zarówno layout-ldltr i layout-ldrtl układów dla Right-To-Left i Left-To-Right językach.

Uruchamiam aplikację dla języka od prawej do lewej i wszystko jest dobrze. Ale po zmianie orientacji, układ obciążenia Android layout-ldltr przeciwko layout-ldrtl, chociaż obecny Locale jest ustawiony na język RTL !!!

Jak rozwiązać ten problem ?!

W AndroidManifest.xml

<application 
    android:name=".QuranApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

W layout-ldrtl\activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:layoutDirection="rtl"> 

<include layout="@layout/toolbar" /> 

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:layoutDirection="rtl"> 

    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layoutDirection="rtl"/> 

    <include 
     layout="@layout/list_view" 
     android:layout_width="@dimen/drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" /> 
</android.support.v4.widget.DrawerLayout> 

UPDATE

Po @JohanShogun komentarza, zmienić android:layoutDirection="rtl" do android:layoutDirection="locale" i problem rozwiązany dla większości przedmiotów.

W pierwszym zdjęciu wszystkich elementów są pokazane bardzo dobre: ​​

Portrait orientation

W trybie poziomym, w StickyListHeader list view w pozycji nagłówka, który wystaje na górze ekranu, Android używane od ltr układ !!! :

Lanscape orientation

Odpowiedz

6

Jeśli masz folder z układu-land zajmie prezydenta nad układem-ldrtl itp być może trzeba utworzyć foldery dla układu-Land-ldrtl i tak dalej.

Innym sposobem obsługi układów od prawej do lewej i od lewej do prawej jest zachowanie jednego pliku układu zapisanego do pracy w obu wersjach.

Na tam LinearLayout etc jest atrybutem:

android:layoutDirection 

można ustawić na wartość „Locale” i swoich poziomych układów będzie odwrócić kolejność.

Zamiast align_left/align_right i gravity_left/gravity_right użycie zamiast align_start/align_end i gravity_start/gravity_end (odnosi się do wszystkich left/right atrybutów). Znaczniki początkowy i końcowy zależą od kierunku układu. Jeśli użytkownik posiada locale z ltrstartu pozostało i koniec jest tuż, jeżeli użytkownik posiada locale z rtlpoczątku ma rację i koniec pozostaje.

ja osobiście wolę korzystania z plików układu, które są zapisywane do pracy zarówno z rtl i ltr nad posiadające oddzielne te, łatwo przegapić aktualizacji w jednej wersji, jeśli trzymać różne pliki, powodując złe doświadczenia użytkownika.

Przenieś także swój układ do folderu układu (usuń "-ldrtl"), a następnie zmień wszystkie android:layoutDirection="rtl" na android:layoutDirection="locale".

+0

Dziękuję za odpowiedź. Dodałem android: atrybut layoutDirection, ale nie wpływa na ten problem. –

+0

jeśli używasz atrybutu układu androida, możesz pominąć foldery przy pomocy zasobów rtl/ltr. Pokaż też swój kod z użyciem atrybutu – JohanShogun

+0

również pamiętaj o umieszczeniu tego w manifeście aplikacji: android: supportsRtl = "true" (na poziomie aplikacji) http://developer.android.com/intl/es/guide /topics/manifest/application-element.html – JohanShogun

Powiązane problemy