Alternative Ressourcen

Alternative Ressourcen sind Ressourcen, die auf ein bestimmtes Gerät oder eine bestimmte Laufzeitkonfiguration abzielen, z. B. die aktuelle Sprache, die bestimmte Bildschirmgröße oder die Pixeldichte. Wenn Android mit einer Ressource übereinstimmen kann, die für ein bestimmtes Gerät oder eine bestimmte Konfiguration spezifischer ist als die Standardressource, wird diese Ressource stattdessen verwendet. Wenn keine alternative Ressource gefunden wird, die der aktuellen Konfiguration entspricht, werden die Standardressourcen geladen. Wie Android entscheidet, welche Ressourcen von einer Anwendung verwendet werden, wird unten im Abschnitt Ressourcenstandort ausführlicher behandelt.

Alternative Ressourcen werden wie Standardressourcen gemäß dem Ressourcentyp als Unterverzeichnis innerhalb des Ordners "Ressourcen" organisiert. Der Name des alternativen Ressourcenunterverzeichnisses hat die folgende Form:ResourceType-Qualifizierer-.

Qualifizierer ist ein Name, der eine bestimmte Gerätekonfiguration identifiziert. Es kann mehrere Qualifizierer in einem Namen geben, von denen jeder durch einen Bindestrich getrennt ist. Der folgende Screenshot zeigt beispielsweise ein einfaches Projekt, das über alternative Ressourcen für verschiedene Konfigurationen wie Gebietsschema, Bildschirmdichte, Bildschirmgröße und Ausrichtung verfügt:

Beim Hinzufügen von Qualifizierern zu einem Ressourcentyp gelten die folgenden Regeln:

  1. Es kann mehrere Qualifizierer geben, wobei jeder Qualifizierer durch einen Bindestrich getrennt ist.

  2. Die Qualifizierer werden möglicherweise nur einmal angegeben.

  3. Qualifizierer müssen in der Reihenfolge liegen, in der sie in der folgenden Tabelle angezeigt werden.

Die möglichen Qualifizierer sind unten als Referenz aufgeführt:

  • MCC und MNC – Die Mobile Country Code (MCC) und optional der Mobilfunknetzcode (MNC). Die SIM-Karte stellt den MCC bereit, während das Netzwerk, mit dem das Gerät verbunden ist, den MNC bereitstellt. Obwohl es möglich ist, Gebietsschemas mithilfe der Mobilen Ländervorwahl als Ziel festzulegen, wird empfohlen, den unten angegebenen Sprachqualifizierer zu verwenden. Wenn Ressourcen beispielsweise auf Deutschland ausgerichtet werden sollen, wäre mcc262der Qualifizierer . Um Ressourcen für T-Mobile in den USA als Ziel zu verwenden, lautet mcc310-mnc026der Qualifizierer . Eine vollständige Liste der Ländercodes und Codes für Mobilfunknetzwerke finden Sie unter http://mcc-mnc.com/.

  • Sprache : Der zweistellige ISO 639-1-Sprachcode und optional gefolgt vom zweistelligen ISO-3166-alpha-2-Regionscode. Wenn beide Qualifizierer bereitgestellt werden, werden sie durch einen -rgetrennt. Wenn Sie beispielsweise französischsprachige Gebietsschemas als Ziel verwenden möchten, wird der Qualifizierer von fr verwendet. Um French-Canadian Gebietsschemas als Ziel festzulegen, wird verwendet fr-rCA . Eine vollständige Liste der Sprachcodes und Regionscodes finden Sie unter Codes für die Darstellung von Sprachennamen und Ländernamen und Codeelementen.

  • Kleinste Breite : Gibt die kleinste Bildschirmbreite an, auf der die Anwendung ausgeführt werden soll. Ausführlichere Informationen finden Sie unter Erstellen von Ressourcen für verschiedene Bildschirme. Verfügbar in API-Ebene 13 (Android 3.2) und höher. Der Qualifizierer sw320dp wird beispielsweise für Geräte verwendet, deren Höhe und Breite mindestens 320dp beträgt.

  • Verfügbare Breite : Die Mindestbreite des Bildschirms im Format wNdp, wobei N die Breite in dichteunabhängigen Pixeln ist. Dieser Wert kann sich ändern, wenn der Benutzer das Gerät rotiert. Ausführlichere Informationen finden Sie unter Erstellen von Ressourcen für verschiedene Bildschirme. Verfügbar in API-Ebene 13 (Android 3.2) und höher. Beispiel: Der Qualifizierer w720dp wird für Geräte mit einer Breite von mindestens 720dp verwendet.

  • Verfügbare Höhe : Die Mindesthöhe des Bildschirms im Format hNdp, wobei N die Höhe in dp ist. Dieser Wert kann sich ändern, wenn der Benutzer das Gerät rotiert. Ausführlichere Informationen finden Sie unter Erstellen von Ressourcen für verschiedene Bildschirme. Verfügbar in API-Ebene 13 (Android 3.2) und höher. Der Qualifizierer h720dp wird beispielsweise für Geräte mit einer Höhe von mindestens 720dp verwendet.

  • Bildschirmgröße : Dieser Qualifizierer ist eine Generalisierung der Bildschirmgröße, für die diese Ressourcen verwendet werden. Ausführlichere Informationen finden Sie unter Erstellen von Ressourcen für verschiedene Bildschirme. Mögliche Werte sind small, normal, large und xlarge. Hinzugefügt in API-Ebene 9 (Android 2.3/Android 2.3.1/Android 2.3.2)

  • Bildschirmaspekt : Dies basiert auf dem Seitenverhältnis, nicht auf der Bildschirmausrichtung. Ein langer Bildschirm ist breiter. In API-Ebene 4 (Android 1.6) hinzugefügt. Mögliche Werte sind long und notlong.

  • Bildschirmausrichtung – Bildschirmausrichtung im Hoch- oder Querformat. Dies kann sich während der Lebensdauer einer Anwendung ändern. Mögliche Werte sind port und land.

  • Dockmodus : Für Geräte in einer Autodock oder einer Schreibtischdockung. In API-Ebene 8 (Android 2.2.x) hinzugefügt. Mögliche Werte sind car und desk.

  • Nachtmodus : Gibt an, ob die Anwendung nachts oder am Tag ausgeführt wird. Dies kann sich während der Lebensdauer einer Anwendung ändern und soll Entwicklern die Möglichkeit geben, dunkle versionen einer Benutzeroberfläche nachts zu verwenden. In API-Ebene 8 (Android 2.2.x) hinzugefügt. Mögliche Werte sind night und notnight.

  • Pixeldichte des Bildschirms (dpi): Die Anzahl der Pixel in einem bestimmten Bereich auf dem physischen Bildschirm. Wird in der Regel als Punkte pro Zoll (dpi) ausgedrückt. Mögliche Werte:

    • ldpi – Bildschirme mit geringer Dichte.

    • mdpi – Bildschirme mit mittlerer Dichte

    • hdpi – Bildschirme mit hoher Dichte

    • xhdpi – Bildschirme mit extra hoher Dichte

    • nodpi – Ressourcen, die nicht skaliert werden sollen

    • tvdpi – Eingeführt in API-Ebene 13 (Android 3.2) für Bildschirme zwischen mdpi und hdpi.

  • Touchscreentyp : Gibt den Typ des Touchscreens an, über den ein Gerät verfügen kann. Mögliche Werte sind notouch (kein Touchscreen), stylus (ein resistiver Touchscreen, der für einen Stift geeignet ist) und finger (ein Touchscreen).

  • Tastaturverfügbarkeit : Gibt an, welche Art von Tastatur verfügbar ist. Dies kann sich während der Lebensdauer einer Anwendung ändern, z. B. wenn ein Benutzer eine Hardwaretastatatur öffnet. Mögliche Werte:

    • keysexposed – Das Gerät verfügt über eine Tastatur. Wenn keine Softwaretastatatur aktiviert ist, wird diese nur verwendet, wenn die Hardwaretastatatur geöffnet wird.

    • keyshidden – Das Gerät verfügt über eine Hardwaretastatatur, ist jedoch ausgeblendet, und es ist keine Softwaretastatatur aktiviert.

    • keyssoft – auf dem Gerät ist eine Softwaretastatatur aktiviert.

  • Primäre Texteingabemethode : Verwenden Sie , um anzugeben, welche Arten von Hardwareschlüsseln für die Eingabe verfügbar sind. Mögliche Werte:

    • nokeys – Es gibt keine Hardwareschlüssel für die Eingabe.

    • qwerty – Es ist eine qwerty-Tastatur verfügbar.

    • 12key – Es gibt eine 12-Tasten-Hardwaretastatatur

  • Verfügbarkeit der Navigationsschlüssel : Wenn die 5-Wege- oder D-Pad-Navigation (Richtungspad) verfügbar ist. Dies kann sich während der Lebensdauer Ihrer Anwendung ändern. Mögliche Werte:

    • navexposed – die Navigationsschlüssel stehen dem Benutzer zur Verfügung.

    • navhidden – die Navigationstasten sind nicht verfügbar.

  • Primäre Nicht-Touch-Navigationsmethode : Die Art der Navigation, die auf dem Gerät verfügbar ist. Mögliche Werte:

    • nonav – Die einzige verfügbare Navigationsmöglichkeit ist der Touchscreen.

    • dpad – für die Navigation steht ein D-Pad (Directional-Pad) zur Verfügung.

    • trackball – das Gerät verfügt über einen Trackball für die Navigation.

    • wheel – das ungewöhnliche Szenario, in dem ein oder mehrere direktionale Räder verfügbar sind

  • Plattformversion (API-Ebene): Die vom Gerät unterstützte API-Ebene im Format vN, wobei N die API-Ebene ist, die als Ziel verwendet wird. Beispielsweise zielt v11 auf ein GERÄT der API-Ebene 11 (Android 3.0) ab.

Ausführlichere Informationen zu Ressourcenqualifizierern finden Sie unter Bereitstellen von Ressourcen auf der Android Developers-Website.

Wie Android bestimmt, welche Ressourcen verwendet werden sollen

Es ist sehr möglich und wahrscheinlich, dass eine Android-Anwendung viele Ressourcen enthält. Es ist wichtig zu verstehen, wie Android die Ressourcen für eine Anwendung auswählt, wenn sie auf einem Gerät ausgeführt wird.

Android bestimmt die Ressourcenbasis, indem der folgende Regeltest durchlaufen wird:

  • Vermeiden Sie widersprüchliche Qualifizierer , z. B. wenn die Geräteausrichtung hoch ist, werden alle Querformatressourcenverzeichnisse abgelehnt.

  • Qualifizierer ignorieren nicht unterstützt : Nicht alle Qualifizierer sind für alle API-Ebenen verfügbar. Wenn ein Ressourcenverzeichnis einen Qualifizierer enthält, der vom Gerät nicht unterstützt wird, wird dieses Ressourcenverzeichnis ignoriert.

  • Identifizieren Sie den Qualifizierer mit der nächsthöchsten Priorität – wählen Sie anhand der obigen Tabelle den Qualifizierer für die nächsthöchste Priorität (von oben nach unten) aus.

  • Behalten Sie alle Ressourcenverzeichnisse für den Qualifizierer bei. Wenn Ressourcenverzeichnisse vorhanden sind, die dem Qualifizierer der obigen Tabelle entsprechen, wählen Sie den Qualifizierer mit der nächsthöchsten Priorität (von oben nach unten) aus.

Diese Regeln werden auch im folgenden Flussdiagramm veranschaulicht:

Flussdiagramm für Ressourcen

Wenn das System nach dichtespezifischen Ressourcen sucht und sie nicht finden kann, versucht es, andere dichtespezifische Ressourcen zu finden und sie zu skalieren. Android verwendet möglicherweise nicht unbedingt die Standardressourcen. Wenn Sie beispielsweise nach einer Ressource mit geringer Dichte suchen, die nicht verfügbar ist, kann Android eine Version mit hoher Dichte der Ressource gegenüber den Standardressourcen oder ressourcen mittlerer Dichte auswählen. Dies geschieht, da die Ressource mit hoher Dichte um den Faktor 0,5 herunterskaliert werden kann, was zu weniger Sichtbarkeitsproblemen führt als das Herunterskalieren einer Ressource mit mittlerer Dichte, die einen Faktor von 0,75 erfordern würde.

Betrachten Sie als Beispiel eine Anwendung mit den folgenden ziehbaren Ressourcenverzeichnissen:

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

Die Anwendung wird nun auf einem Gerät mit der folgenden Konfiguration ausgeführt:

  • Gebietsschema – en-GB
  • Ausrichtung – Port
  • Bildschirmdichte – hdpi
  • Touchscreentyp – notouch
  • Primäre Eingabemethode – 12key

Zunächst werden die französischen Ressourcen eliminiert, da sie mit dem Gebietsschema von en-GBin Konflikt stehen und uns mit folgendem zurückbrauchen:

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

Als Nächstes wird der erste Qualifizierer aus der Obigen Qualifizierertabelle ausgewählt: MCC und MNC. Es gibt keine Ressourcenverzeichnisse, die diesen Qualifizierer enthalten, sodass der MCC/MNC-Code ignoriert wird.

Der nächste Qualifizierer ist ausgewählt, nämlich Sprache. Es gibt Ressourcen, die dem Sprachcode entsprechen. Alle Ressourcenverzeichnisse, die nicht dem Sprachcode von en entsprechen, werden abgelehnt, sodass die Liste der Ressourcen jetzt lautet:

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

Der nächste Qualifizierer, der vorhanden ist, ist für die Bildschirmausrichtung, sodass alle Ressourcenverzeichnisse, die nicht der Bildschirmausrichtung von port entsprechen, entfernt werden:

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

Als Nächstes wird der Qualifizierer für die Bildschirmdichte angezeigt, ldpiwas zum Ausschluss eines weiteren Ressourcenverzeichnisses führt:

drawable-en-port-ldpi

Als Ergebnis dieses Prozesses verwendet Android die ziehbaren Ressourcen im Ressourcenverzeichnis drawable-en-port-ldpi für das Gerät.

Hinweis

Die Bildschirmgrößenqualifizierer bieten eine Ausnahme für diesen Auswahlprozess. Android kann Ressourcen auswählen, die für einen kleineren Bildschirm als das aktuelle Gerät ausgelegt sind. Beispielsweise kann ein Gerät mit großem Bildschirm die Ressourcen verwenden, die für einen Bildschirm in normaler Größe bereitgestellt werden. Das Gegenteil ist jedoch nicht der Fall: Dasselbe Gerät mit großem Bildschirm verwendet nicht die ressourcen, die für einen xlarge-Bildschirm bereitgestellt werden. Wenn Android keinen Ressourcensatz finden kann, der einer bestimmten Bildschirmgröße entspricht, stürzt die Anwendung ab.