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
Odpowiedz
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.
Ale inni zrobili to całkiem dobrze, spójrz na to: https://play.google.com/store/apps/details?id=com.hamrahyar.nabzebazaar – Aliaaa
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
@Booger Jest to możliwe teraz! (zobacz moją odpowiedź) – semsamot
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.
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.
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+.
* Nie można rozpoznać symbolu "ActionBarRtlizer" * (Myślę, że zapomniałeś wspomnieć o tym, co powinniśmy zaimportować, aby rozwiązać ten problem) –
wykorzystanie tego, to będzie zrobić układ z RTL, ale to w dominującej korzeń swojej xml
android:layoutDirection="rtl"
android:textDirection="rtl"
znaleźliście rozwiązanie? –
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