Udostępnij za pośrednictwem


Zasoby alternatywne

Zasoby alternatywne to zasoby przeznaczone dla określonego urządzenia lub konfiguracji czasu wykonywania, takie jak bieżący język, konkretny rozmiar ekranu lub gęstość pikseli. Jeśli system Android może dopasować zasób, który jest bardziej specyficzny dla określonego urządzenia lub konfiguracji niż zasób domyślny, ten zasób zostanie użyty zamiast tego. Jeśli nie znajdzie alternatywnego zasobu zgodnego z bieżącą konfiguracją, zostaną załadowane zasoby domyślne. Jak system Android decyduje, jakie zasoby będą używane przez aplikację, zostaną omówione bardziej szczegółowo poniżej, w sekcji Lokalizacja zasobu

Zasoby alternatywne są zorganizowane jako podkatalog wewnątrz folderu Resources zgodnie z typem zasobu, podobnie jak zasoby domyślne. Nazwa podkatalogu alternatywnego zasobu ma postać: Kwalifikator ResourceType-

Kwalifikator to nazwa identyfikująca określoną konfigurację urządzenia. Może istnieć więcej niż jeden kwalifikator w nazwie, każdy z nich oddzielony kreską. Na przykład poniższy zrzut ekranu przedstawia prosty projekt, który zawiera alternatywne zasoby dla różnych konfiguracji, takich jak ustawienia regionalne, gęstość ekranu, rozmiar ekranu i orientacja:

Podczas dodawania kwalifikatorów do typu zasobu mają zastosowanie następujące reguły:

  1. Może istnieć więcej niż jeden kwalifikator, z każdym kwalifikatorem oddzielonym kreską.

  2. Kwalifikatory mogą być określone tylko raz.

  3. Kwalifikatory muszą być w kolejności, w której pojawiają się w poniższej tabeli.

Poniżej wymieniono możliwe kwalifikatory:

  • MCC i MNCkod kraju mobilnego (MCC) i opcjonalnie kod sieci komórkowej (MNC). Karta SIM zapewni mcC, podczas gdy sieć, z jaką urządzenie jest podłączone, zapewni MNC. Chociaż można kierować ustawienia regionalne przy użyciu kodu kraju dla urządzeń przenośnych, zalecane jest użycie kwalifikatora języka określonego poniżej. Na przykład aby skierować zasoby do Niemiec, kwalifikatorem będzie mcc262. Aby kierować zasoby dla T-Mobile w USA, kwalifikator to mcc310-mnc026. Aby uzyskać pełną listę kodów kraju dla urządzeń przenośnych i kodów sieci mobilnych, zobacz http://mcc-mnc.com/.

  • Language — dwuliterowy kod języka ISO 639-1, po którym opcjonalnie następuje dwuliterowy kod regionu ISO-3166-alpha-2. Jeśli oba kwalifikatory są udostępniane, są one oddzielone przez -r. Na przykład, aby kierować do ustawień regionalnych języka francuskiego fr , używany jest kwalifikator. Do kierowania francuskich kanadyjskich ustawień regionalnych, fr-rCA byłoby używane. Aby uzyskać pełną listę kodów języków i kodów regionów, zobacz Kody dotyczące reprezentacji nazw języków i nazw krajów oraz elementów kodu.

  • Najmniejsza szerokość — określa najmniejszą szerokość ekranu, na podstawie których aplikacja ma być wykonywana. Bardziej szczegółowo opisano tworzenie zasobów dla różnych ekranów. Dostępny w interfejsie API poziom 13 (Android 3.2) i nowszy. Na przykład kwalifikator sw320dp jest używany do kierowania urządzeń, których wysokość i szerokość wynosi co najmniej 320dp.

  • Dostępna szerokość — minimalna szerokość ekranu w formacie WNdp, gdzie N to szerokość w pikselach niezależnych od gęstości. Ta wartość może ulec zmianie, gdy użytkownik obraca urządzenie. Bardziej szczegółowo opisano tworzenie zasobów dla różnych ekranów. Dostępny w interfejsie API poziom 13 (Android 3.2) i nowszy. Przykład: kwalifikator w720dp służy do urządzeń docelowych, które mają szerokość co najmniej 720dp.

  • Dostępna wysokość — minimalna wysokość ekranu w formacie hNdp, gdzie N to wysokość w dp. Ta wartość może ulec zmianie, gdy użytkownik obraca urządzenie. Bardziej szczegółowo opisano tworzenie zasobów dla różnych ekranów. Dostępny w interfejsie API poziom 13 (Android 3.2) i nowszy. Na przykład kwalifikator h720dp jest używany do urządzeń docelowych, które mają wysokość co najmniej 720dp

  • Rozmiar ekranu — ten kwalifikator to uogólnienie rozmiaru ekranu, dla którego znajdują się te zasoby. Bardziej szczegółowo omówiono tworzenie zasobów dla różnych ekranów. Możliwe wartości to small, , largenormali xlarge. Dodano w interfejsie API poziom 9 (Android 2.3/Android 2.3.1/Android 2.3.2)

  • Aspekt ekranu — jest to oparte na współczynniku proporcji, a nie na orientacji ekranu. Długi ekran jest szerszy. Dodano do interfejsu API poziom 4 (Android 1.6). Możliwe wartości są długie i nie długie.

  • Orientacja ekranu — orientacja pionowa lub pozioma ekranu. Może to ulec zmianie w okresie istnienia aplikacji. Możliwe wartości to port i land.

  • Tryb docku — w przypadku urządzeń w doku samochodowym lub stacji dokującej biurka. Dodano do interfejsu API poziom 8 (Android 2.2.x). Możliwe wartości to car i desk.

  • Tryb nocny — określa, czy aplikacja działa w nocy, czy w ciągu dnia. Może to ulec zmianie w okresie istnienia aplikacji i ma na celu umożliwienie deweloperom korzystania z ciemniejszych wersji interfejsu w nocy. Dodano do interfejsu API poziom 8 (Android 2.2.x). Możliwe wartości to night i notnight.

  • Gęstość pikseli ekranu (dpi) — liczba pikseli w danym obszarze na ekranie fizycznym. Zazwyczaj wyrażone jako kropki na cal (dpi). Dopuszczalne wartości:

    • ldpi – Ekrany o niskiej gęstości.

    • mdpi – Ekrany o średniej gęstości

    • hdpi – Ekrany o wysokiej gęstości

    • xhdpi – Dodatkowe ekrany o wysokiej gęstości

    • nodpi — Zasoby, które nie mają być skalowane

    • tvdpi — wprowadzone w interfejsie API poziom 13 (Android 3.2) dla ekranów między mdpi i hdpi.

  • Typ ekranu dotykowego — określa typ ekranu dotykowego, który może mieć urządzenie. Możliwe wartości to notouch (bez ekranu dotykowego), stylus (odporny ekran dotykowy odpowiedni dla rysika) i finger (ekran dotykowy).

  • Dostępność klawiatury — określa, jakiego rodzaju klawiatura jest dostępna. Może to ulec zmianie w okresie istnienia aplikacji — na przykład po otwarciu klawiatury sprzętowej przez użytkownika. Dopuszczalne wartości:

    • keysexposed — Urządzenie ma dostępną klawiaturę. Jeśli nie ma włączonej klawiatury programowej, jest to używane tylko wtedy, gdy klawiatura sprzętowa jest otwarta.

    • keyshidden — Urządzenie ma klawiaturę sprzętową, ale jest ukryte i nie jest włączona klawiatura programowa.

    • keyssoft — urządzenie ma włączoną klawiaturę programową.

  • Podstawowa metoda wprowadzania tekstu — służy do określania, jakie rodzaje kluczy sprzętowych są dostępne dla danych wejściowych. Dopuszczalne wartości:

    • nokeys — Nie ma kluczy sprzętowych dla danych wejściowych.

    • qwerty – Dostępna jest klawiatura qwerty.

    • 12key — Klawiatura sprzętowa 12-klawiszowa

  • Dostępność klucza nawigacji — jeśli dostępna jest nawigacja dwukierunkowa lub d-pad (kierunkowa). Może to ulec zmianie w okresie istnienia aplikacji. Dopuszczalne wartości:

    • navexposed — klucze nawigacyjne są dostępne dla użytkownika

    • navhidden — klucze nawigacyjne nie są dostępne.

  • Podstawowa metoda nawigacji nieobsługiwnej — rodzaj nawigacji dostępny na urządzeniu. Dopuszczalne wartości:

    • nonav – jedynym dostępnym obiektem nawigacyjnym jest ekran dotykowy

    • dpad – d-pad (pad kierunkowy) jest dostępny do nawigacji

    • trackball – urządzenie ma trackball do nawigacji

    • wheel – nietypowy scenariusz, w którym dostępne jest co najmniej jedno kółka kierunkowe

  • Wersja platformy (poziom interfejsu API) — poziom interfejsu API obsługiwany przez urządzenie w formacie vN, gdzie N jest poziomem interfejsu API docelowym. Na przykład wersja 11 będzie dotyczyć urządzenia z poziomem interfejsu API 11 (Android 3.0).

Aby uzyskać więcej informacji na temat kwalifikatorów zasobów, zobacz Udostępnianie zasobów w witrynie internetowej deweloperów systemu Android.

Jak system Android określa, jakie zasoby mają być używane

Jest bardzo możliwe i prawdopodobne, że aplikacja systemu Android będzie zawierać wiele zasobów. Ważne jest, aby zrozumieć, w jaki sposób system Android wybierze zasoby dla aplikacji po uruchomieniu na urządzeniu.

System Android określa bazę zasobów, iterując przez następujący test reguł:

  • Wyeliminuj sprzeczne kwalifikatory — na przykład jeśli orientacja urządzenia jest pionowa, wszystkie katalogi zasobów poziomych zostaną odrzucone.

  • Ignoruj kwalifikatory nieobsługiwane — nie wszystkie kwalifikatory są dostępne dla wszystkich poziomów interfejsu API. Jeśli katalog zasobów zawiera kwalifikator, który nie jest obsługiwany przez urządzenie, ten katalog zasobów zostanie zignorowany.

  • Zidentyfikuj następny kwalifikator o najwyższym priorytcie — odwołując się do powyższej tabeli, wybierz następny kwalifikator o najwyższym priorytcie (od góry do dołu).

  • Zachowaj wszystkie katalogi zasobów dla kwalifikatora — jeśli istnieją katalogi zasobów zgodne z kwalifikatorem w powyższej tabeli, wybierz następny kwalifikator o najwyższym priorytcie (od góry do dołu).

Te reguły przedstawiono również w następującym schemacie blokowym:

Resources flowchart

Gdy system szuka zasobów specyficznych dla gęstości i nie może ich znaleźć, spróbuje zlokalizować inne zasoby specyficzne dla gęstości i skalować je. System Android może niekoniecznie używać zasobów domyślnych. Na przykład w przypadku wyszukiwania zasobu o niskiej gęstości i niedostępności system Android może wybrać wersję zasobu o wysokiej gęstości dla zasobów domyślnych lub średnich gęstości. Dzieje się tak, ponieważ zasób o wysokiej gęstości można skalować w dół o współczynnik 0,5, co spowoduje zmniejszenie liczby problemów z widocznością niż skalowanie w dół zasobu o średniej gęstości, co wymagałoby współczynnika 0,75.

Rozważmy na przykład aplikację, która ma następujące katalogi zasobów z możliwością rysowania:

drawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

Teraz aplikacja jest uruchamiana na urządzeniu z następującą konfiguracją:

  • Ustawienia regionalne — en-GB
  • Orientacja — port
  • Gęstość ekranu — hdpi
  • Typ ekranu dotykowego — notouch
  • Podstawowa metoda wprowadzania — 12key

Na początek zasoby francuskie są wyeliminowane, ponieważ powodują konflikt z ustawieniami regionalnymi en-GB, pozostawiając nas z:

drawable
drawable-en
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

Następnie pierwszy kwalifikator jest wybierany z powyższej tabeli kwalifikatorów: MCC i MNC. Nie ma katalogów zasobów, które zawierają ten kwalifikator, więc kod MCC/MNC jest ignorowany.

Zostanie wybrany następny kwalifikator, czyli Język. Istnieją zasoby zgodne z kodem języka. Wszystkie katalogi zasobów, które nie są zgodne z kodem języka, en są odrzucane, dzięki czemu lista zasobów jest teraz:

drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi

Następny kwalifikator, który jest obecny, dotyczy orientacji ekranu, więc wszystkie katalogi zasobów, które nie są zgodne z orientacją port ekranu, zostaną wyeliminowane:

drawable-en-port
drawable-en-port-ldpi

Następny jest kwalifikator gęstości ekranu, ldpiktóry powoduje wykluczenie jeszcze jednego katalogu zasobów:

drawable-en-port-ldpi

W wyniku tego procesu system Android będzie używać zasobów do rysowania w katalogu drawable-en-port-ldpi zasobów dla urządzenia.

Uwaga

Kwalifikatory rozmiaru ekranu stanowią jeden wyjątek od tego procesu wyboru. W systemie Android można wybrać zasoby przeznaczone dla mniejszego ekranu niż to, co zapewnia bieżące urządzenie. Na przykład duże urządzenie ekranu może używać zasobów zapewniających normalny ekran. Jednak odwrotność tego nie jest prawdziwa: to samo duże urządzenie ekranu nie będzie używać zasobów dostępnych dla ekranu xlarge. Jeśli system Android nie może odnaleźć zestawu zasobów zgodnego z danym rozmiarem ekranu, aplikacja ulegnie awarii.