Aplikacje zawierają zasoby dopasowane do konkretnej kultury. Na przykład aplikacja może zawierać ciągi tekstowe związane z kulturą, które są przetłumaczone na język bieżącego regionu.
Dobrze jest prowadzić zasobów związanych z kulturą i pozostałych elementów aplikacji. Android rozwiązuje zasobów dotyczących języków i kultury na podstawie ustawień regionalnych systemu. Ty może zapewnić wsparcie dla różnych języków za pomocą katalogu zasobów do swojego projektu na Androida.
Możesz określić zasoby dostosowane do kultury osób korzystających z
. Możesz podać dowolny typ zasobów, który jest
dostosowane do języka i kultury użytkowników. Na przykład parametr
Na tych zrzutach ekranu widać aplikację, w której widać ciąg znaków i zasoby, które można rysować
domyślny język urządzenia en_US
i hiszpański
Język: es_ES
.
![Aplikacja wyświetla
różne teksty i ikony w zależności od języka.](https://developer.android.google.cn/static/images/training/languages_01.png?authuser=9&hl=pl)
Rysunek 1. Aplikacja używa różnych zasobów w zależności od dla bieżącego języka.
Gdy tworzysz projekt za pomocą pakietu Android SDK
Narzędzia generują katalog res/
na najwyższym poziomie
nad projektem. W tym katalogu res/
znajdują się podkatalogi różnych zasobów.
. Jest też kilka plików domyślnych, takich jak res/values/strings.xml
który zawiera wartości ciągu znaków.
Obsługa różnych języków nie ogranicza się już do korzystania z zasobów dostosowanych do różnych lokalizacji. Niektórzy użytkownicy wybierają język z zapisem od prawej do lewej, na przykład w języku arabskim lub hebrajskim. Innych użytkowników, którzy ustawili język interfejsu na język skrypty LTR, np. angielski, mogą wyświetlać lub generować treści. w języku ze skryptem RTL. Aby zapewnić obsługę obu typów użytkowników, aplikacja musi:
- W przypadku języków RTL zastosuj układ RTL.
- Wykrywanie i zadeklarowanie kierunku danych tekstowych, które są wyświetlane w środku sformatowanych wiadomości. Zwykle można wywołaj metodę, tak jak to opisano w w tym przewodniku, który określa kierunek danych tekstowych.
Tworzenie katalogów lokalnych i plików zasobów
Aby dodać obsługę większej liczby języków, utwórz w środku dodatkowe katalogi
res/
Nazwa każdego katalogu musi być zgodna z tym formatem:
<resource type>-b+<language code>[+<country code>]
Na przykład values-b+es/
zawiera ciąg znaków
zasoby dla lokalizacji z kodem języka es
. Podobnie
mipmap-b+es+ES/
zawiera ikony języków z atrybutem es
kodu języka oraz kodu kraju ES
.
Android wczytuje odpowiednie zasoby zgodnie z ustawieniami regionalnymi urządzenia w czasie działania. Więcej informacji: Udostępnij materiały alternatywne.
Po wybraniu obsługiwanych regionów utwórz podkatalogi zasobów i . Na przykład:
MyProject/ res/ values/ strings.xml values-b+es/ strings.xml mipmap/ country_flag.png mipmap-b+es+ES/ country_flag.png
Wypełnij pliki zasobów zlokalizowanymi zasobami. Oto przykłady zlokalizowanych plików zasobów w postaci ciągów znaków i obrazów:
Ciągi w języku angielskim (domyślny język) w /values/strings.xml
:
<resources> <string name="hello_world">Hello World!</string> </resources>
Hiszpańskie ciągi tekstowe (es
język) w /values-b+es/strings.xml
:
<resources> <string name="hello_world">¡Hola Mundo!</string> </resources>
Ikona flagi Stanów Zjednoczonych (domyślny język) w:
/mipmap/country_flag.png
:
![Ikona flagi
Stany Zjednoczone](https://developer.android.google.cn/static/images/training/languages_us_flag.png?authuser=9&hl=pl)
Rysunek 2. Ikona domyślnego języka (en_US).
Ikona flagi Hiszpanii (es_ES
język) w:
/mipmap-b+es+ES/country_flag.png
:
![Ikona flagi
Hiszpania](https://developer.android.google.cn/static/images/training/languages_es_flag.png?authuser=9&hl=pl)
Rysunek 3. Ikona używana dla języka es_ES
.
Uwaga: możesz używać kwalifikatorów konfiguracji, takich jak kwalifikator języka, w przypadku zasobów dowolnego typu. Możesz na przykład udostępnij zlokalizowane wersje obiektów rysowania map bitowych. Więcej informacji znajdziesz w artykule Lokalizacja aplikacji.
Korzystanie z zasobów w aplikacji
Odwoływanie się do zasobów w kodzie źródłowym i innych plikach XML za pomocą atrybutu
atrybut name
każdego zasobu:
R.<resource type>.<resource name>
Dostępne są różne typy treści.
metod, które akceptują zasoby w ten sposób, co pokazano w następujących przykładach:
Kotlin
// Get a string resource val hello = resources.getString(R.string.hello_world) // Or supply a string resource to a method that requires a string TextView(this).apply { setText(R.string.hello_world) }
Java
// Get a string resource String hello = getResources().getString(R.string.hello_world); // Or supply a string resource to a method that requires a string TextView textView = new TextView(this); textView.setText(R.string.hello_world);
W plikach XML możesz odwoływać się do zasobu za pomocą
@<resource type>/<resource name>
, jeśli kod XML
atrybut przyjmuje zgodną wartość, jak w tym przykładzie:
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/country_flag" />
Uwaga: aby ustawienia języka użytkownika były priorytetowe,
określ języki, które obsługuje Twoja aplikacja, używając właściwości resConfigs
. Dla:
więcej informacji znajdziesz w
Określ języki obsługiwane przez aplikację.
Formatowanie tekstu w wiadomościach
Jednym z najczęstszych zadań w aplikacji jest formatowanie tekstu. Zlokalizowane wiadomości są formatowane przez wstawienie w odpowiednich miejscach danych tekstowych i liczbowych. Niestety w przypadku interfejsu RTL lub danych RTL proste formatowanie może wyświetlać nieprawidłowe lub nawet nieczytelne dane wyjściowe.
W przypadku języków takich jak arabski, hebrajski, perski i urdu używany jest zapis RTL. Jednak niektóre elementy, takie jak liczby czy osadzone Tekst LTR jest zapisany w tekście od prawej do lewej. Języki używające skryptów LTR, w tym angielski, również są dwukierunkowe, bo mogą zawierać osadzone skrypty RTL, które muszą wyświetlać się w formacie RTL.
Aplikacje często generują wystąpienia tego typu osadzonego tekstu odwrotnego, np. przez wstawienie danych tekstowych dowolnego i dowolnego kierunku tekstu w zlokalizowane wiadomości. Takie połączenie wskazówek często nie ułatwia wyraźnego określenia, gdzie należy tekst w przeciwnym kierunku zaczyna się i kończy, więc generowane przez aplikację tekstu może negatywnie wpłynąć na wrażenia użytkowników.
Chociaż domyślna obsługa dwukierunkowego tekstu przez system zazwyczaj renderuje tekstu zgodnie z oczekiwaniami, tekst może nie renderować się prawidłowo, gdy aplikacja wstawia go do zlokalizowanej wiadomości. Oto przykłady sytuacji: w których mogą się wyświetlać nieprawidłowo:
-
Tekst wstawiony na początku wiadomości:
PERSON_NAME dzwoni do Ciebie
-
Tekst zaczynający się od cyfry, np. adres lub numer telefonu:
987 654 3210
-
Tekst zaczynający się znakiem interpunkcyjnym, np. numer telefonu:
+19876543210
-
Tekst kończący się znakami interpunkcyjnymi:
Czy na pewno chcesz to zrobić?
-
Tekst, który zawiera już oba kierunki:
Słowo część Ameryka Północna oznacza banan w języku hebrajskim.
Przykład
Załóżmy, że jakaś aplikacja musi czasami wyświetlić komunikat „Czy czy chodzi Ci o %s?" z adresem wstawionym w miejscu działania %s. Aplikacja obsługuje różne języki interfejsu, więc komunikat pochodzi z konkretnego języka zasobu i korzysta z kierunku RTL, gdy na urządzeniu jest ustawiony język RTL. Na przykład w przypadku języka hebrajskiego będzie wyglądać tak:
Tętniąca życiem informacja o pochodzeniu drogowym w pomieszczeniu %s
Proponowany adres może jednak pochodzić z bazy danych, która nie zawiera tekstu w języku lokalnym. Jeśli na przykład adres jest miejscem w Kalifornii, pojawia się w bazie danych jako tekst w języku angielskim. Jeśli umieścisz parametr adres „15 Bay Street, Laurel, CA” do wiadomości RTL bez podawania żadnych wskazówki dotyczące kierunku tekstu, wynik jest nieoczekiwany lub nieprawidłowy:
Dowiedz się więcej o pochodzeniu audycji z powodu umiejscowienia w USA 15 Bay Street, Laurel, Kalifornia?
Numer domu jest widoczny po prawej stronie adresu, a nie nie narusza zasad. Przez to numer domu wygląda bardziej jak dziwny urząd pocztowy w kodzie. Ten sam problem może wystąpić, jeśli w wiadomości umieścisz tekst od prawej do lewej, korzysta z kierunku tekstu LTR.
Wyjaśnienie i rozwiązanie
Problem w tym przykładzie występuje, ponieważ narzędzie do formatowania tekstu nie określ, że „15” jest częścią adresu, więc system nie może stwierdzić, czy "15" jest częścią tekstu od prawej do lewej przed nim lub tekstu LTR, który pojawia się co potem.
Aby rozwiązać ten problem, użyj metody unicodeWrap()
z biblioteki BidiFormatter
zajęcia. Ta metoda wykrywa kierunek ciągu znaków i zawija go w standardzie Unicode.
formatujące znaki, które deklarują ten kierunek.
Fragment kodu poniżej pokazuje, jak używać
unicodeWrap()
:
Kotlin
val mySuggestion = "15 Bay Street, Laurel, CA" val myBidiFormatter: BidiFormatter = BidiFormatter.getInstance() // The "did_you_mean" localized string resource includes // a "%s" placeholder for the suggestion. String.format(getString(R.string.did_you_mean), myBidiFormatter.unicodeWrap(mySuggestion))
Java
String mySuggestion = "15 Bay Street, Laurel, CA"; BidiFormatter myBidiFormatter = BidiFormatter.getInstance(); // The "did_you_mean" localized string resource includes // a "%s" placeholder for the suggestion. String.format(getString(R.string.did_you_mean), myBidiFormatter.unicodeWrap(mySuggestion));
Bo 15 jest teraz wyświetlana w tekście, który jest zadeklarowany jako LTR, wyświetla się w prawidłowym miejscu:
Dowiedz się więcej o tym, jak radzą sobie z Twoją wiadomością w USA 15 Bay Street, Laurel, Kalifornia.
Użyj metody unicodeWrap()
na
każdy fragment tekstu wstawiony do zlokalizowanej wiadomości, chyba że spełniony jest jeden z tych warunków:
- Tekst jest wstawiany do zrozumiałego dla komputera ciągu znaków, np. identyfikatora URI lub zapytanie SQL.
- Wiesz już, że fragment tekstu jest już prawidłowo zawinięty.
Uwaga: jeśli aplikacja jest kierowana na Androida 4.3 (poziom interfejsu API 18) lub
użyj wersji BidiFormatter
znalezionej w
Android Framework. W przeciwnym razie użyj wersji
Element BidiFormatter
został znaleziony w bibliotece pomocy.
Formatowanie liczb
Używaj format ciągi tekstowe, a nie wywołania metod, do konwertowania liczb na ciągi tekstowe w aplikacji logika:
Kotlin
var myIntAsString = "$myInt"
Java
String myIntAsString = String.format("%d", myInt);
Dzięki temu liczby będą odpowiednio sformatowane w Twoim języku, co może należy użyć innego zestawu cyfr.
Jeśli używasz
String.format()
, aby utworzyć
Zapytanie SQL na urządzeniu ustawionym na język, który korzysta z własnego zestawu cyfr, np. perski
i większości języków arabskich, problemy występują, jeśli którykolwiek z parametrów zapytania
są liczbami. Dzieje się tak, ponieważ numer jest sformatowany zgodnie z cyframi lokalnymi, a
te cyfry są nieprawidłowe w SQL.
Aby zachować liczby w formacie ASCII i zadbać o poprawność zapytania SQL, musisz zamiast tego użyć
przeciążona wersja
String.format()
, które
uwzględnia język jako pierwszy parametr. Używanie argumentu języka
Locale.US
Obsługa powielania układu
Osoby używające pisma RTL wolą interfejs RTL, który zawiera menu wyrównane do prawej, tekst wyrównany do prawej oraz strzałki do przodu, które wskazują Użytkownik rozłączył się.
Rysunek 4 przedstawia kontrast między wersją LTR ekranu Aplikacja Ustawienia i jej odpowiednik w formacie RTL:
![Obszar powiadomień jest wyrównany do prawego górnego rogu ekranu,
przycisk menu na pasku aplikacji znajduje się w lewym górnym rogu,
treści w głównej części ekranu są wyrównane do lewej i są wyświetlane
po lewej stronie, a przycisk Wstecz znajduje się w lewym dolnym rogu i jest
w lewo.](https://developer.android.google.cn/static/images/training/basics/ltr-display.png?authuser=9&hl=pl)
![Obszar powiadomień jest wyrównany do lewej
znajduje się w prawym górnym rogu,
głównej części ekranu jest wyrównany do prawej strony i ma format RTL,
przycisk Wstecz znajduje się w prawym dolnym rogu i kieruje na
po prawej](https://developer.android.google.cn/static/images/training/basics/rtl-display.png?authuser=9&hl=pl)
Podczas dodawania do aplikacji obsługi RTL używaj weź pod uwagę następujące kwestie:
- Powielanie tekstu RTL jest obsługiwane tylko w aplikacjach na urządzeniach z Android 4.2 (poziom interfejsu API 17) lub nowszy. Aby dowiedzieć się, jak obsługiwać odbicie lustrzane tekstu na starszych urządzeniach: uzyskiwanie pomocy w przypadku starszych aplikacji w tym przewodniku.
- Aby sprawdzić, czy aplikacja obsługuje kierunek tekstu od prawej do lewej: testuj, korzystając z opcji dla programistów, zgodnie z opisem w tym przewodniku, i zaproś innych którzy używają skryptów RTL w aplikacji.
Uwaga: aby wyświetlić dodatkowe wskazówki dotyczące projektowania związane z powielanie układu, w tym listę elementów, które są i nie są odpowiednie; do odbicia lustrzanego, Dwukierunkowa łączność z wytycznymi Material Design.
Aby odzwierciedlić układ interfejsu w aplikacji i wyświetlać go jako RTL w języku RTL, wykonaj czynności opisane w poniższych sekcjach.
Modyfikowanie plików kompilacji i manifestu
Zmodyfikuj plik build.gradle
i plik manifestu aplikacji modułu aplikacji.
w następujący sposób:
build.gradle (Module: app)
Odlotowe
android { ... defaultConfig { targetSdkVersion 17 // Or higher ... } }
Kotlin
android { ... defaultConfig { targetSdkVersion(17) // Or higher ... } }
AndroidManifest.xml
<manifest ... > ... <application ... android:supportsRtl="true"> </application> </manifest>
Uwaga: jeśli aplikacja jest kierowana na Androida 4.1.1 (poziom API 16) lub
poniżej, atrybut android:supportsRtl
jest ignorowany, wraz z każdym
Wartości atrybutów start
i end
, które pojawiają się w
plików układu aplikacji. W takim przypadku odbicie lustrzane układu od prawej do lewej nie jest możliwe.
automatycznie w aplikacji.
Aktualizowanie istniejących zasobów
Przekonwertuj left
i right
na start
i
end
w istniejących plikach zasobów układu.
Pozwala to wyrównać elementy interfejsu aplikacji na podstawie
ustawienia języka użytkownika.
Uwaga: zanim zaktualizujesz zasoby, dowiedz się, jak: zapewniają pomoc dotyczącą starszych aplikacji lub na Androida 4.1.1 (poziom interfejsu API 16) lub starszego.
Aby korzystać z funkcji dopasowania od prawej do lewej, zmień atrybuty w pliki układu wyświetlane w tabeli 1.
Tabela 1. Atrybuty użyj, gdy aplikacja obsługuje wiele kierunków tekstowych
Tabela 2 pokazuje, jak system obsługuje atrybuty wyrównania interfejsu na podstawie
docelowa wersja pakietu SDK, niezależnie od tego, czy atrybuty left
i right
oraz czy atrybuty start
i end
są
zdefiniowano jego definicję.
Tabela 2. Z uwzględnieniem zachowania wyrównania elementów interfejsu docelowej wersji pakietu SDK i zdefiniowanych atrybutów.
|
Definiujesz lewą i prawą stronę? | Określić początek i koniec? | Wynik |
---|---|---|---|
Tak | Tak | Tak |
Używane są start i end , zastępujące
left i right
|
Tak | Tak | Nie | W użyciu left i right |
Tak | Nie | Tak | W użyciu start i end |
Nie | Tak | Tak |
left i right są używane (start i
end są ignorowane)
|
Nie | Tak | Nie | W użyciu left i right |
Nie | Nie | Tak |
start i end widzą left i
right
|
Dodawanie zasobów związanych z kierunkami i językami
Ten krok obejmuje dodanie określonych wersji układu, elementów rysunkowych wartości plików zasobów, które zawierają niestandardowe wartości dla różnych języków; i wskazówki tekstowe.
W Androidzie 4.2 (poziom interfejsu API 17) i nowszych możesz używać interfejsu -ldrtl
(układ-kierunek-od prawej do lewej) i -ldltr
kwalifikatory zasobów (układ, kierunek: od lewej do prawej). Aby utrzymać się do tyłu
zgodność z istniejącymi zasobami, starsze wersje Androida wykorzystują
kwalifikatory języka zasobu, aby określić właściwy kierunek tekstu.
Załóżmy, że chcesz dodać plik układu z obsługą skryptów RTL,
takich jak język hebrajski, arabski i perski. Aby to zrobić, dodaj
layout-ldrtl/
w katalogu res/
, jak
w tym przykładzie:
res/ layout/ main.xml This layout file is loaded by default. layout-ldrtl/ main.xml This layout file is loaded for languages using an RTL text direction, including Arabic, Persian, and Hebrew.
Jeśli chcesz dodać wersję układu, która jest przeznaczona tylko W języku arabskim struktura katalogu wygląda tak:
res/ layout/ main.xml This layout file is loaded by default. layout-ar/ main.xml This layout file is loaded for Arabic text. layout-ldrtl/ main.xml This layout file is loaded only for non-Arabic languages that use an RTL text direction.
Uwaga: zasoby specyficzne dla danego języka mają pierwszeństwo przed specyficzne dla układu, które mają pierwszeństwo przed zasobami domyślnymi. i zasobami Google Cloud.
Korzystanie z obsługiwanych widżetów
Od Androida 4.2 (poziom interfejsu API 17) większość elementów interfejsu platformy obsługuje RTL.
kierunek tekstu. Kilka elementów struktury, takich jak
ViewPager
, nie obsługuj tekstu od prawej do lewej
kierunek.
Widżety na ekranie głównym obsługują kierunek tekstu od prawej do lewej, o ile ich
odpowiednie pliki manifestu zawierają przypisanie atrybutu
android:supportsRtl="true"
Obsługa starszych aplikacji
Jeśli Twoja aplikacja jest kierowana na Androida 4.1.1 (poziom interfejsu API 16) lub starszego, dopisz
Atrybuty left
i right
, a także
start
i end
.
Aby sprawdzić, czy w układzie musi być używany kierunek tekstu od prawej do lewej, użyj funkcji następującą logikę:
Kotlin
private fun shouldUseLayoutRtl(): Boolean { return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { View.LAYOUT_DIRECTION_RTL == layoutDirection } else { false } }
Java
private boolean shouldUseLayoutRtl() { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { return View.LAYOUT_DIRECTION_RTL == getLayoutDirection(); } else { return false; } }
Uwaga: aby uniknąć problemów ze zgodnością, użyj wersji 23.0.1 lub większą wartość Android Narzędzia do tworzenia pakietów SDK.
Testowanie za pomocą opcji programisty
Na urządzeniach z Androidem 4.4 (poziom interfejsu API 19) lub nowszym Wymuś układ od prawej do lewej w opcji programisty na urządzeniu. To ustawienie umożliwia wyświetlenie tekstu korzystającego ze skryptów LTR, np. tekstu polskiego, w zapisie RTL i trybu uzyskiwania zgody.
Zaktualizuj logikę aplikacji
Ta sekcja opisuje określone aspekty logiki aplikacji, aby aktualizować podczas dostosowywania aplikacji do obsługi wielu wskazówek tekstowych.
Zmiany usługi
Do obsługi zmian w dowolnej właściwości związanej z wersją od prawej do lewej, np. układem
kierunek, parametry układu, dopełnienie, kierunek tekstu, wyrównanie tekstu lub
rysowalnej pozycji – użyj
onRtlPropertiesChanged()
oddzwanianie. To wywołanie zwrotne umożliwia uzyskanie bieżącego kierunku układu
odpowiednio zaktualizować obiekty View
aktywności.
Wyświetlenia
Jeśli tworzysz widżet interfejsu, który nie jest bezpośrednio częścią aktywności hierarchię widoków, na przykład okno lub taki element interfejsu, ustaw prawidłową w zależności od kontekstu. Następujący fragment kodu: pokazuje, jak ukończyć ten proces:
Kotlin
val config: Configuration = context.resources.configuration view.layoutDirection = config.layoutDirection
Java
final Configuration config = getContext().getResources().getConfiguration(); view.setLayoutDirection(config.getLayoutDirection());
Kilka metod klasy View
wymaga dodatkowych
rozważanie zakupu:
onMeasure()
- Pomiary w widoku mogą się różnić w zależności od kierunku tekstu.
onLayout()
- Jeśli tworzysz własną implementację układu, musisz zadzwonić
super()
w swojej wersji aplikacjionLayout()
i dostosuj niestandardową logikę do obsługi skryptów RTL. onDraw()
- Jeśli implementujesz widok niestandardowy lub dodajesz zaawansowane funkcje do
rysowania, musisz zaktualizować swój kod, aby obsługiwał skrypty RTL. Użyj
następujący kod, aby określić, czy widżet działa w trybie RTL:
Kotlin
// On devices running Android 4.1.1 (API level 16) and lower, // you can call the isLayoutRtl() system method directly. fun isLayoutRtl(): Boolean = layoutDirection == LAYOUT_DIRECTION_RTL
Java
// On devices running Android 4.1.1 (API level 16) and lower, // you can call the isLayoutRtl() system method directly. public boolean isLayoutRtl() { return (getLayoutDirection() == LAYOUT_DIRECTION_RTL); }
Elementy rysowalne
Jeśli masz element rysowalny, który musi zostać zduplikowany w przypadku układu od prawej do lewej, ukończ wykonaj jedną z tych czynności w zależności od wersji Androida na urządzeniu:
-
Na urządzeniach z Androidem 4.3 (poziom interfejsu API 18) lub starszym
dodać i zdefiniować pliki zasobów
-ldrtl
. -
W Androidzie 4.4 (poziom interfejsu API 19) i nowszych
android:autoMirrored="true"
podczas określania obiektu rysowalnego, który pozwala systemowi na odbicie lustrzane układu RTL.Uwaga:
android:autoMirrored
działa tylko w przypadku prostych obiektów rysowalnych, których dwukierunkowe odbicie lustrzane jest po prostu odbiciem graficznym całego elementu, który można rysować. Jeśli obiekt rysowalny zawiera wiele elementów lub jeśli obiekt rysowalny zmienia jego możecie wykonać odbicie lustrzane. Kiedykolwiek skonsultuj się z ekspertem dwukierunkowym, aby ustalić, czy lustrzane obiekty rysunkowe są bardziej zrozumiałe dla użytkowników.
Grawitacja
Jeśli kod układu aplikacji zawiera właściwość Gravity.LEFT
lub
Gravity.RIGHT
, zmień te
wartości do Gravity.START
oraz
Gravity.END
.
Jeśli masz kod w Kotlin lub Java, który zależy od
usługi Gravity.LEFT
lub Gravity.RIGHT
,
możesz dostosować go do tej zmiany, ustawiając absoluteGravity
tak, by odpowiadał parametrowi
layoutDirection
Na przykład, jeśli korzystasz z tego kodu:
Kotlin
when (gravity and Gravity.HORIZONTAL_GRAVITY_MASK) { Gravity.LEFT -> { // Handle objects that are left-aligned. } Gravity.RIGHT -> { // Handle objects that are right-aligned. } }
Java
switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: // Handle objects that are left-aligned. break; case Gravity.RIGHT: // Handle objects that are right-aligned. break; }
Zmień go na taki:
Kotlin
val absoluteGravity: Int = Gravity.getAbsoluteGravity(gravity, layoutDirection) when (absoluteGravity and Gravity.HORIZONTAL_GRAVITY_MASK) { Gravity.LEFT -> { // Handle objects that are left-aligned. } Gravity.RIGHT -> { // Handle objects that are right-aligned. } }
Java
final int layoutDirection = getLayoutDirection(); final int absoluteGravity = Gravity.getAbsoluteGravity(gravity, layoutDirection); switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: // Handle objects that are left-aligned. break; case Gravity.RIGHT: // Handle objects that are right-aligned. break; }
Oznacza to, że możesz zachować dotychczasowy kod, który jest wyrównany do lewej i
wyrównane do prawej, nawet jeśli używasz start
i
end
dla wartości grawitacji.
Uwaga: podczas wprowadzania ustawień grawitacji użyj
przeciążona wersja Gravity.apply()
, która zawiera
layoutDirection
.
Marginesy i dopełnienie
Aby umożliwić obsługę skryptów RTL w aplikacji, postępuj zgodnie z tymi sprawdzonymi metodami dotyczącymi wartości marginesów i dopełnienia:
-
Używaj tych identyfikatorów:
getMarginStart()
igetMarginEnd()
zamiast atrybuty kierunków odpowiadają wartościomleftMargin
irightMargin
-
Jeśli używasz funkcji
setMargins()
, zamień wartości parametrówleft
naright
argumentów, jeśli aplikacja wykrywa skrypty RTL. -
Jeśli aplikacja zawiera niestandardową logikę dopełnienia, zastąp ją
setPadding()
isetPaddingRelative()
Obsługa preferencji językowych dla poszczególnych aplikacji
W wielu przypadkach użytkownicy wielojęzyczni ustawiają język systemu na jeden – np. angielski – ale w konkretnych aplikacjach, np. niderlandzki, chiński lub hindi. Aby pomóc są wygodniejsze dla wszystkich użytkowników. Android 13 wprowadza te funkcje: aplikacje obsługujące wiele języków:
-
Ustawienia systemu: scentralizowane miejsce, w którym użytkownicy mogą wybrać preferowanego języka dla każdej aplikacji.
Aplikacja musi zadeklarować atrybut
android:localeConfig
w swoim manifestu, aby poinformować system, że obsługuje on wiele języków. Aby dowiedzieć się więcej, przeczytaj instrukcje dla utworzenie zasobu i zadeklaruj go w pliku manifestu aplikacji. -
Dodatkowe interfejsy API: publiczne interfejsy API, takie jak
setApplicationLocales()
. orazgetApplicationLocales()
. metod w zakresieLocaleManager
zezwól aplikacjom na ustawianie języka innego niż język systemu na stronie w środowisku wykonawczym.Aplikacje, które używają niestandardowych selektorów języka w aplikacji, mogą używać tych interfejsów API, aby przekazywać użytkownikom spójne wrażenia użytkowników niezależnie od tego, gdzie wybrali język ustawieniach. Publiczne interfejsy API pomagają również ograniczyć ilość powtarzalnego kodu oraz obsługują dzielone pliki APK. Obsługują też Automatyczną kopię zapasową dla Google Apps do przechowywania ustawień języka użytkownika na poziomie aplikacji.
Aby zapewnić zgodność wsteczną z poprzednimi wersjami Androida, dostępne są również odpowiadające im interfejsy API w Androidzie X. Zalecamy użycie Appcompat 1.6.0-beta01 lub wyższe.
Aby dowiedzieć się więcej, zapoznaj się z instrukcjami dotyczącymi wdrożenie nowej interfejsów API.
Zobacz również
Dodatkowe materiały
Aby dowiedzieć się więcej o obsłudze starszych urządzeń, zapoznaj się z tymi materiałami:
Posty na blogu
- Do Zadbaj o ułatwienie dostępu do aplikacji i zapewniaj ich zgodność z różnymi urządzeniami
- Pisanie odbiorcy z całego świata