2013-07-07 14 views
14

Tworzę aplikację na Androida dla języka od prawej do lewej. Używam ActionBarSherlock (kompatybilnej biblioteki paska działań Android).
Chodzi mi o to, jak zmienić kierunek działania paska na RTL, nawet jeśli użytkownik nie ustawi domyślnego języka Locale i RTL.
Jeśli ktoś ma pomysł nawet na standardowy pasek akcji Android, jest cenny i może Ci go udostępnić.
Dziękizmiana kierunku paska akcji od prawej do lewej

+0

znaleźliście rozwiązanie? –

+0

Nie znalazłem dobrego rozwiązania, ale jeszcze nie przetestowałem rozwiązania "semsamota" na temat "RTLizera". Jeśli to przetestujesz, powiedz mi o tym. Dzięki. – Aliaaa

Odpowiedz

1

Jestem prawie pewien, że nie będziesz w stanie zrobić tego, o co prosisz. Wzorzec ActionBar jest bardzo specyficzny, a biblioteki obsługujące go będą obsługiwały tylko zdefiniowany wzorzec (który ma ikonę w lewym górnym rogu, a następnie tytuł i przyciski akcji po prawej stronie).

Zmiana testu jest tak prosta, jak zmiana ustawień regionalnych i tekstu w aplikacji (jak już wspomniano).

Zmiana pozycji elementów w obrębie samego ActionBar nie będzie obsługiwana przez biblioteki obsługujące standardowy wzorzec ActionBar - ponieważ opisywany opis nie jest obsługiwanym wzorcem interfejsu użytkownika.

Myślę, że powinieneś opuścić AB, tak jak jest. Zmiana kolejności nie jest konieczna, ponieważ i tak nie ma żadnej orientacji w prawo-lewo, a zmiana ta będzie bardzo dokuczliwa dla użytkowników.

Podsumowując, nie będziesz w stanie tego zrobić z istniejącymi bibliotekami - i prawdopodobnie nie powinieneś tak.

+0

Ale inni zrobili to całkiem dobrze, spójrz na to: https://play.google.com/store/apps/details?id=com.hamrahyar.nabzebazaar – Aliaaa

+0

Domyślam się, że użyli niestandardowego układu, aby utworzyć to element same w sobie. Myślę, że implementacja natywna (lub ActionBarSherlock) nie obsługuje tego w tej chwili (zobaczy, czy ktoś ma inną odpowiedź). – Booger

+0

@Booger Jest to możliwe teraz! (zobacz moją odpowiedź) – semsamot

52

Z poziomu interfejsu API systemu Android na poziomie 17+ obsługuje RTL natywnie. Aby wymusić, aby cały układ był RTL, w tym ActionBar, wykonaj następujące czynności.

Edycja AndroidManifest.xml i dodać android:supportsRtl="true" do tagu <application> a następnie dodaj następującą linię do góry onCreate swoje działania metoda() forceRTLIfSupported(); a następnie włóż funkcji follow do swojej działalności.

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 
private void forceRTLIfSupported() 
{ 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ 
     getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 
    } 
} 

Oczywiście jest to pomocne tylko przy debugowaniu. Użyj wersji View.LAYOUT_DIRECTION_LOCALE dla kompilacji produkcyjnych, aby Twój układ został zmieniony tylko wtedy, gdy wybrana przez użytkownika lokalizacja systemu/język aka locale obsługuje RTL.

Nadzieję, że pomaga.

+1

dziękuję za odpowiedź. jednak potrzebuję odpowiedzi na wsparcie zgodności dla niższych wersji sdk, jeśli odpowiedź istnieje! – Aliaaa

+0

Dzięki. Bardzo dobrze. –

+1

Niestety jest to układ RTL. Chcę tylko zmienić kierunek paska akcji, nie wszystkie aplikacje. co mogę zrobić? – Kenji

2

Booger ma rację. Aplikacja "Nabz Bazar", o której wspomniałeś, nie jest zgodna z prawdą w każdej wersji Androida. Jak widać here ABS tak naprawdę nie robi nic na Androida 4.0 lub nowszym, a zrzuty ekranu tej aplikacji są na Androidzie 4.2.

5

Musimy wierzyć potężną regułę w programowaniu:

wszystko będzie możliwe, gdy znasz swoje narzędzia.

Tak więc, od teraz można używać tej biblioteki, żeby naprawdę RTLize swoimi actionbars: https://github.com/semsamot/ActionBarRTLizer

I oczywiście jest to zgodne z API Level 7+.

+0

* Nie można rozpoznać symbolu "ActionBarRtlizer" * (Myślę, że zapomniałeś wspomnieć o tym, co powinniśmy zaimportować, aby rozwiązać ten problem) –

0

wykorzystanie tego, to będzie zrobić układ z RTL, ale to w dominującej korzeń swojej xml

android:layoutDirection="rtl" 
    android:textDirection="rtl" 
Powiązane problemy