Anwendungsressourcen

Ressourcen sind den zusätzlichen Dateien und statischen Inhalten, die Ihr Code verwendet, z. B. Bitmaps, Layout Definitionen, Benutzeroberflächen-Strings, Animationsanweisungen und mehr.

App-Ressourcen wie Bilder und Strings aus Ihrem damit Sie sie unabhängig voneinander verwalten können. Bieten Sie auch alternative Ressourcen für Gerätekonfigurationen zu erstellen, indem Sie diese in speziell benannte Ressourcenverzeichnisse gruppieren. Bei Laufzeit verwendet Android basierend auf der aktuellen Konfiguration die entsprechende Ressource. Für können Sie beispielsweise je nach Bildschirmgröße oder unterschiedlichen -Zeichenfolgen abhängig von der Spracheinstellung.

Nachdem Sie Ihre Anwendungsressourcen externalisiert haben, können Sie darauf zugreifen mithilfe von Ressourcen-IDs, die in der Klasse R Ihres Projekts generiert werden. In diesem Dokument erfahren Sie, wie Sie die Ressourcen in Ihrem Android-Projekt gruppieren. Es zeigt Ihnen auch, wie um alternative Ressourcen für bestimmte Gerätekonfigurationen bereitzustellen und von dort App-Code oder andere XML-Dateien.

Ressourcentypen gruppieren

Platzieren Sie jeden Ressourcentyp in einem bestimmten Unterverzeichnis des res/-Verzeichnis. Hier ist als Beispiel die Dateihierarchie für ein einfaches Projekt:

MyProject/
    src/
        MyActivity.java
    res/
        drawable/
            graphic.png
        layout/
            main.xml
            info.xml
        mipmap/
            icon.png
        values/
            strings.xml

Das Verzeichnis res/ enthält alle Ressourcen Unterverzeichnisse: eine Bildressource, zwei Layoutressourcen, ein Verzeichnis mipmap/ für den Launcher und eine Zeichenfolgen-Ressourcendatei. Die Ressource Verzeichnisnamen sind wichtig und werden in Tabelle 1 beschrieben.

Hinweis:Weitere Informationen zur Verwendung von Mipmap-Ordnern finden Sie unter App-Symbole in Mipmap-Verzeichnisse einfügen

Tabelle 1 Ressourcenverzeichnisse wird im Projektverzeichnis res/ unterstützt.

Verzeichnis Ressourcentyp
animator/ XML-Dateien zur Definition der Property Animationen.
anim/ XML-Dateien, die Tween definieren Animationen. Property-Animationen können ebenfalls in diesem Verzeichnis gespeichert werden, Das Verzeichnis animator/ wird für Attributanimationen bevorzugt, um zwischen den beiden zu unterscheiden. Typen.
color/ XML-Dateien, die eine Liste von Statusfarben definieren. Weitere Informationen finden Sie unter Farbe Statuslistenressource angezeigt werden.
drawable/

Bitmapdateien (PNG, .9.png, JPG oder GIF) oder XML-Dateien, die sind in die folgenden Untertypen von Drawable-Ressourcen kompiliert:

  • Bitmapdateien
  • Neun Patches (Bitmaps mit anpassbarer Größe)
  • Statuslisten
  • Formen
  • Animations-Drawables
  • Andere Drawables

Weitere Informationen finden Sie unter Drawable Ressourcen.

mipmap/ Drawbare Dateien für verschiedene Kompaktheitsgrade von Launcher-Symbolen. Weitere Informationen zum Verwalten Launcher-Symbole mit mipmap/ Ordnern, siehe App-Symbole einfügen Mipmap-Verzeichnisse.
layout/ XML-Dateien, die das Layout der Benutzeroberfläche definieren. Weitere Informationen finden Sie unter Layoutressource.
menu/ XML-Dateien, die App-Menüs definieren, z. B. Optionsmenüs, Kontextmenüs oder Untermenüs. Weitere Informationen finden Sie unter Menüressource.
raw/

Beliebige Dateien, die im Rohformat gespeichert werden. Um diese Ressourcen mit einer InputStream, Anruf Resources.openRawResource() durch die Ressourcen-ID R.raw.filename.

Wenn Sie jedoch Zugriff auf die ursprünglichen Dateinamen und die Dateihierarchie benötigen, sollten Sie Ressourcen werden im Verzeichnis assets/ statt im Verzeichnis res/raw/ gespeichert. Dateien in „assets/“ erhalten kein Ressourcen-ID, sodass Sie sie nur mit AssetManager lesen können.

values/

XML-Dateien, die einfache Werte wie Strings, Ganzzahlen und Farben enthalten.

Während XML-Ressourcendateien in anderen res/-Unterverzeichnissen eine einzelne Ressource definieren basierend auf dem XML-Dateinamen beschreiben Dateien im Verzeichnis values/ mehrere Ressourcen. Für eine Datei in diesem Verzeichnis definiert jedes untergeordnete Element des <resources>-Elements ein einzelnes . Beispielsweise erstellt ein <string>-Element ein Ressource vom Typ R.string und durch das Element <color> wird ein R.color erstellt. .

Da jede Ressource mit einem eigenen XML-Element definiert ist, können Sie die Datei benennen und fassen Sie verschiedene Ressourcentypen in einer Datei zusammen. Zur Klarstellung sei erwähnt, eindeutige Ressourcentypen in verschiedenen Dateien platzieren möchten. Hier ein Beispiel für einen Dateinamen, für Ressourcen, die Sie in diesem Verzeichnis erstellen können:

Weitere Informationen finden Sie unter Stringressourcen. Stilressource und Weitere Ressourcentypen.

xml/ Beliebige XML-Dateien, die zur Laufzeit durch Aufrufen von Resources.getXML() gelesen werden können. Verschiedene XML-Konfigurationsdateien muss hier gespeichert werden, etwa eine Suchkonfiguration.
font/ Schriftartdateien mit Erweiterungen wie TTF, OTF, oder TTC- oder XML-Dateien, die ein <font-family>-Element enthalten. Weitere Informationen zu Schriftarten als Ressourcen zur Verfügung stehen, Schriftart als XML-Ressource hinzufügen

Achtung:Speichern Sie Ressourcendateien nie direkt im res/. Dies verursacht einen Compilerfehler.

Weitere Informationen zu den einzelnen Ressourcentypen finden Sie unter Ressourcentypen.

Die Ressourcen, die Sie in den in Tabelle 1 definierten Unterverzeichnissen speichern, sind Ihr Standard Ressourcen. Diese Ressourcen definieren also das Standarddesign und die Standardinhalte für Ihre App. Unterschiedliche Typen von Android-Geräten können jedoch unterschiedliche Arten von Ressourcen erfordern.

Sie können beispielsweise verschiedene Layoutressourcen für Geräte bereitstellen, die größer sind als normal Bildschirmen, um den zusätzlichen Platz auf dem Bildschirm zu nutzen. Sie können auch verschiedene Zeichenfolgenressourcen angeben, der den Text in Ihrer Benutzeroberfläche basierend auf der Spracheinstellung des Geräts übersetzt. Um die Ressourcen für verschiedene Geräte müssen Sie neben Ihrer Standardkonfiguration alternative Ressourcen bereitstellen, Ressourcen.

Alternative Ressourcen anbieten

Die meisten Apps bieten alternative Ressourcen für bestimmte Geräte Konfigurationen. Füge beispielsweise alternative Drawable-Ressourcen für verschiedene Bildschirmdichten und alternative Stringressourcen für verschiedene Sprachen. Zur Laufzeit zeigt Android die aktuelle Gerätekonfiguration erkennt und die entsprechende Ressourcen für Ihre App.

Abbildung 1: Zwei Geräte, die je nach Bildschirmgröße unterschiedliche Layoutressourcen verwenden.

So geben Sie konfigurationsspezifische Alternativen für eine Reihe von Ressourcen an:

  1. Erstellen Sie in res/ ein neues Verzeichnis mit dem Namen im folgenden Formular: <resources_name>-<qualifier>.
    • <resources_name> ist der Verzeichnisname des entsprechenden Standardwerts. Ressourcen (in Tabelle 1 definiert).
    • <qualifier> ist ein Name, der eine individuelle Konfiguration angibt für die diese Ressourcen verwendet werden sollen (definiert in Tabelle 2).

    Sie können mehrere <qualifier> anhängen. Trennen Sie die einzelnen Felder mit einem Bindestrich.

    Achtung:Wenn Sie mehrere Qualifier anhängen, und platzieren Sie sie in derselben Reihenfolge, in der sie in Tabelle 2 aufgeführt sind. Ob die Kennzeichner sortiert sind werden die Ressourcen ignoriert.

  2. Speichern Sie die entsprechenden alternativen Ressourcen in diesem neuen Verzeichnis. Die Ressourcendateien müssen mit denen der Standard-Ressourcendateien identisch sind.

Hier einige Beispiele für Standard- und alternative Ressourcen:

res/
    drawable/
        icon.png
        background.png
    drawable-hdpi/
        icon.png
        background.png

Der Qualifier hdpi gibt an, dass die Ressourcen in diesem Verzeichnis für Geräte mit einer Bildschirm mit hoher Dichte. Die Größe der Bilder in diesen Drawable-Verzeichnissen die Bildschirmdichten, aber die Dateinamen sind ist das Gleiche. Auf diese Weise wird die Ressourcen-ID, mit der Sie auf das icon.png- oder Das background.png-Image ist immer identisch. Android wählt die Version jeder Ressource, die durch Gerätevergleich am besten mit dem aktuellen Gerät übereinstimmt Konfigurationsinformationen durch die Qualifizierer im Namen des Ressourcenverzeichnisses.

Achtung:Wenn Sie eine alternative Ressource definieren, die Ressource auch in einer Standardkonfiguration. Andernfalls kann es passieren, dass in Ihrer App wenn das Gerät eine Konfiguration ändert. Wenn Sie z. B. nur einen String values-en und nicht values, erhält deine App möglicherweise eine Resource Not Found-Ausnahme, wenn der Nutzer die standardmäßige Systemsprache ändert.

In Tabelle 2 sind die gültigen Konfigurationsqualifizierer nach Priorität geordnet aufgeführt. Sie können Sie können einem Verzeichnisnamen mehrere Qualifizierer hinzufügen, indem Sie die Qualifizierer durch Bindestrich trennen. Wenn Sie für ein Ressourcenverzeichnis gibt, müssen Sie diese dem Verzeichnisnamen in der Reihenfolge hinzufügen, in der sie sind in der Tabelle aufgeführt.

Tabelle 2: Konfigurationsqualifizierer Namen.

Konfiguration Werte des Qualifizierers Beschreibung
Kundencenter und MNC Beispiele:
mcc310
mcc310-mnc004
mcc208-mnc00

Der Mobile Country Code (MCC), optional gefolgt vom Mobile Network Code (MNC) aus der SIM-Karte im Gerät. Beispiel: mcc310 steht für die USA eines beliebigen Mobilfunkanbieters, mcc310-mnc004 steht für die USA bei Verizon und mcc208-mnc00 für Frankreich bei Orange.

Wenn das Gerät eine Funkverbindung verwendet, also ein GSM-Telefon ist, werden die Kundencenter- und MNC-Werte angezeigt. aus der SIM-Karte.

Sie können das Kundencenter auch allein verwenden, um beispielsweise länderspezifische rechtliche Anforderungen einzubeziehen Ressourcen in Ihrer App. Wenn Sie ausschließlich auf Grundlage der Sprache festlegen müssen, verwenden Sie das Attribut Qualifier Sprache, Skript (optional) und Region (optional). Wenn Sie das Kundencenter-Konto und MNC-Qualifier, seien Sie vorsichtig und testen Sie, ob er wie erwartet funktioniert.

Sieh dir auch die Konfigurationsfelder mcc und mnc an, die den aktuellen Ländercode des Mobilgeräts angeben bzw. den Code des Mobilfunknetzes.

Sprache, Skript (optional) und Region (optional) Beispiele:
en
fr
en-rUS
fr-rFR
fr-rCA
b+en

b+en+US b+es+419
b+zh+Hant
b+sr+Latn+RS

Die Sprache wird durch einen aus zwei Buchstaben bestehenden ISO 639-1-Sprachcode definiert, der optional durch einen aus zwei Buchstaben bestehenden ISO 3166-1-alpha-2-Regionscode (vorher: r) klein.

Bei den Codes wird nicht zwischen Groß- und Kleinschreibung unterschieden. Das Präfix r wird verwendet, um den Regionsteil zu unterscheiden. Sie können keine Region angeben allein.

Mit Android 7.0 (API-Level 24) wird nun BCP 47 Sprach-Tags, mit denen Sie Sprach- und regionsspezifische Ressourcen. Ein Sprach-Tag besteht aus einer Reihe von ein oder mehrere Subtags, die jeweils den Bereich der Sprache, die durch das Gesamt-Tag identifiziert wird. Weitere Informationen zu Sprach-Tags finden Sie unter Tags zur Identifizierung von Sprachen.

Zur Verwendung eines BCP 47-Sprach-Tags verketten Sie b+ und einen Sprachcode mit zwei Buchstaben nach ISO 639-1, optional gefolgt durch zusätzliche, durch + getrennte Untertags.

Das Sprach-Tag kann sich im Laufe der Lebensdauer Ihrer App in folgenden Fällen ändern: Nutzer ihre Sprache in den Systemeinstellungen ändern. Informationen zu Wie sich dies auf deine App während der Laufzeit auswirken kann, findest du unter Handle Konfigurationsänderungen.

Eine vollständige Anleitung zur Lokalisierung Ihrer App für andere Sprachen finden Sie unter App lokalisieren.

Siehe auch die Methode getLocales(), die die definierte Liste der Sprachen. Diese Liste enthält die primäre Sprache.

Layout-Richtung ldrtl
ldltr

Die Layoutrichtung Ihrer App. ldrtl bedeutet „layout-direction-right-to-left“. ldltr bedeutet „layout-direction-left-to-right“ und ist der implizite Standardwert.

Dies kann für jede Ressource gelten, z. B. für Layouts, Drawables oder Werte.

Wenn Sie beispielsweise ein bestimmtes Layout für Arabisch und ein allgemeines Layout für alle anderen linksläufigen Persisch oder Hebräisch verwenden, dann verwenden Sie Verzeichnisse wie die folgende:

res/
  layout/
    main.xml (Standardlayout)
  layout-ar/
    main.xml (spezifisches Layout für Arabisch)
  layout-ldrtl/
    main.xml (von rechts nach links) außer für Arabisch, weil das "ar" „Language Qualifier“ hat ein höhere Priorität)

Hinweis: Um linksläufige Layoutfunktionen zu aktivieren, für deine App musst du SupportsRtl auf "true" und TargetSdkVersion auf 17 oder höher setzen.

In API-Level 17 hinzugefügt.

Geringste Breite sw<N>dp

Beispiele:
sw320dp
sw600dp
sw720dp
usw.

Die kürzeste Dimension des Bildschirmbereichs, der einer App zur Verfügung steht. Die smallestWidth des App-Fensters ist der der verfügbaren Höhe und Breite des Fensters am kürzesten ist. Sie können sich auch mit der „kleinstmöglichen Breite“ für das Fenster. Sie können diesen Qualifizierer verwenden, damit Ihre App eine Breite von mindestens <N> dps für auf der Benutzeroberfläche.

Wenn Ihr Layout beispielsweise erfordert, dass die kleinste Abmessungen sollte immer mindestens 600 dp betragen, können Sie mit diesem Kennzeichner Erstellen Sie die Layoutressourcen in einem res/layout-sw600dp/-Verzeichnis. Das System werden diese Ressourcen nur verwendet, wenn die kleinste Größe des verfügbaren Bildschirms mindestens 600 dp, unabhängig davon, ob die 600-dp-Seite die vom Nutzer wahrgenommene Höhe oder Breite angeben. Die kleinste Breite kann sich ändern, wenn die Fenstergröße angepasst wird. die verfügbare Breite/Höhe ändern oder neu positioniert wird, eine Änderung der Systemeinbindungen.

Die kleinste Breite zur Bestimmung der eine allgemeine Bildschirmgröße zu verwenden, da die Breite oft der ausschlaggebende Faktor für das Entwerfen eines Layouts. Eine Benutzeroberfläche scrollt häufig vertikal, auf den minimalen horizontalen Platz beschränkt.

Die verfügbare Breite ist auch der entscheidende Faktor bei der Entscheidung, oder ein Mehrfenster-Layout für Tablets. Daher interessieren Sie sich wahrscheinlich die kleinstmögliche Breite auf jedem Gerät haben.

Die kleinste Breite eines Geräts berücksichtigt die Bildschirmgestaltung und System-UI verwendet. Hat das Gerät beispielsweise persistente UI-Elemente auf der Bildschirm, der den Platz entlang der Achse der kleinsten Breite ausmacht, angibt, dass die kleinste Breite kleiner als die tatsächliche Bildschirmgröße ist, Dies sind Bildschirmpixel, die für Ihre Benutzeroberfläche nicht verfügbar sind.

Einige Werte, die Sie hier für gängige Bildschirmgrößen verwenden können:

  • 320, für Geräte mit Bildschirmkonfigurationen wie: <ph type="x-smartling-placeholder">
      </ph>
    • 240 x 320 LDPI (QVGA-Handy)
    • 320 x 480 mdpi (Handy)
    • HD-Handy: 480 x 800 hdpi
  • 480, für Bildschirme wie 480 x 800 mdpi (Tablet/Handy)
  • 600, für Bildschirme wie 600 x 1024 mdpi (7"-Tablet)
  • 720, für Bildschirme wie 720 x 1280 mdpi (10"-Tablet)

Wenn Ihre Anwendung mehrere Ressourcenverzeichnisse mit unterschiedlichen Werten für den smallestWidth-Qualifier verwendet, verwendet das System den Kennzeichner, der dem Wert am nächsten ist (ohne ihn zu überschreiten). smallestWidth des Geräts.

In API-Level 13 hinzugefügt.

Weitere Informationen finden Sie im android:requiresSmallestWidthDp. das den Mindestwert smallestWidth angibt, mit dem ob deine App kompatibel ist und smallestScreenWidthDp Konfigurationsfeld, das den Wert smallestWidth des Geräts enthält.

Weitere Informationen zum Design für verschiedene Bildschirme mit diesem Qualifier finden Sie unter Responsives/adaptives Design mit Ansichten:

Verfügbare Breite und Höhe w<N>dp
h<N>dp

Beispiele:
w720dp
w1024dp
h720dp
h1024dp
usw.

Gibt die mindestens verfügbare Bildschirmbreite oder -höhe an (in definierten dp-Einheiten) durch den Wert <N>), an dem die Ressource verwendet wird. Diese werden die Konfigurationswerte mit der aktuellen Breite und Höhe des Geräts verglichen, sich die Ausrichtung zwischen Hoch- und Querformat ändert, das Gerät auf- bzw. zugeklappt wird, in den Mehrfenstermodus versetzt bzw. beendet wird. Im Mehrfenstermodus spiegeln die Werte die Breite und Höhe des Fensters, das die App enthält, und nicht die Breite und Höhe des Gerätebildschirms. Ebenso beziehen sich die Werte bei eingebetteten Aktivitäten auf die Breite und die Höhe der einzelnen Aktivitäten, nicht die Breite und Höhe des Bildschirms. Weitere Informationen Siehe Einbetten von Aktivitäten.

Die verfügbare Breite und Höhe sind häufig nützlich, um zu bestimmen, ob ein Mehrfenstermodus verwendet werden soll. da selbst auf einem Tablet oft nicht dasselbe Mehrfensterlayout verwendet werden soll, für das Hochformat ebenso wie für das Querformat. Sie können diese verwenden, um die Mindestbreite und/oder -höhe, die für das Layout erforderlich ist, anstatt sowohl die Bildschirmgröße zu verwenden Ausrichtungs-Qualifier zusammen.

Wenn Ihre Anwendung mehrere Ressourcenverzeichnisse mit unterschiedlichen Werten bereitstellt Für diese Konfigurationen verwendet das System diejenige, die am nächsten liegt (ohne zu überschreiten) der aktuellen Bildschirmbreite des Geräts. Am ähnlichsten wird ermittelt, indem die Unterschiede addiert werden. der angegebenen Bildschirmbreite und der Differenz zwischen die tatsächliche Bildschirmhöhe und die angegebene Höhe ohne Angabe von Höhen und Breiten den Wert 0 haben.

Die Werte schließen den Bereich aus, Fenstereinfügungen. Wenn das Gerät also dauerhafte UI-Elemente an den Rändern der Anzeige haben, sind die Werte für Breite und Höhe kleiner als die tatsächlichen Bildschirmabmessungen sind, auch wenn die App von Rand zu Rand angezeigt wird. mit <ph type="x-smartling-placeholder"></ph> Window.setDecorFitsSystemWindows oder . WindowCompat.setDecorFitsSystemWindows

Einige vertikale Bildschirmdesigns, die nicht fixiert sind (z. B. Smartphones Statusleiste, die im Vollbildmodus ausgeblendet werden kann, werden hier nicht berücksichtigt. sind Fensterdekorationen wie die Titel- oder Aktionsleiste. Apps müssen also darauf vorbereitet sein, etwas kleiner als angegeben ist.

Hinweis:Das System wählt die Ressource aus, die mit beiden in Breite und Höhe festlegen. Daher wird eine Ressource, die beides angibt, gegenüber stark bevorzugt. eine, die nur eine der beiden Optionen angibt. Ist der Bildschirm beispielsweise 720 dp breit und 1.280 dp hoch. Eine Ressource ist mit w720dp qualifiziert und eine andere ist als w700dp-h1200dp wird Letzteres ausgewählt, obwohl ersteres eine genaue Übereinstimmung mit welchem ist. die es definiert.

In API-Level 13 hinzugefügt.

Siehe auch screenWidthDp und screenHeightDp Konfigurationsfelder, die die aktuelle Bildschirmbreite und -höhe enthalten.

Weitere Informationen zum Design für verschiedene Bildschirme mit diesem Qualifier finden Sie unter Responsives/adaptives Design mit Ansichten:

Displaygröße small
normal
large
xlarge
  • small: Bildschirme, die ähnlich groß sind wie ein QVGA-Bildschirm mit niedriger Dichte. Die Mindestlayoutgröße für einen kleinen Bildschirm beträgt ungefähr 320 x 426 dp-Einheiten. Beispiele sind QVGA niedrige Dichte und VGA hohe Dichte.
  • normal: Bildschirmen, die ähnlich groß sind wie ein HVGA-Bildschirm mit mittlerer Dichte. Die minimale Layoutgröße für einen normalen Bildschirm etwa 320 x 470 dp. Beispiele für solche Bildschirme sind WQVGA- niedrige Dichte, mittlere HVGA-Dichte und WVGA mit hoher Dichte.
  • large: Bildschirme die ähnlich groß sind wie ein mittelgroßer VGA-Bildschirm. Die Mindestlayoutgröße für eine große Bildschirmgröße beträgt etwa 480 x 640 dp. Beispiele: VGA und WVGA mittlerer Dichte Bildschirmen.
  • xlarge: Bildschirme, die erheblich größer sind als der HVGA-Bildschirm mit mittlerer Dichte. Die Mindestlayoutgröße für einen großen Bildschirm ist etwa 720 x 960 dp. In den meisten Fällen werden Geräte mit sehr großen Bildschirmen zu groß, um sie in einer Tasche mitzunehmen. Wahrscheinlich handelt es sich um Geräte im Tablet-Stil. Hinzugefügt in API-Level 9.

Hinweis:Größenqualifizierer verwenden bedeutet nicht, dass die Ressourcen nur für Bildschirme dieser Größe bestimmt sind. Falls nicht, Alternative Ressourcen mit Qualifier bereitstellen, die besser zum aktuellen Gerät passen Konfiguration verwendet wird, kann das System die Ressourcen nutzen, die am besten .

Achtung:Wenn alle Ihre Ressourcen eine Größe verwenden die größer als der aktuelle Bildschirm ist, nicht verwendet und Ihre App während der Laufzeit abstürzt. Dies ist zum Beispiel der Fall, wenn alle Ressourcen sind mit dem Qualifier xlarge getaggt, das Gerät hat jedoch eine normale Größe Bildschirm.

In API-Level 4 hinzugefügt.

Siehe auch screenLayout Konfigurationsfeld, das angibt, ob der Bildschirm klein, normal oder groß ist.

Weitere Informationen finden Sie unter Bildschirm Kompatibilitätsübersicht.

Bildschirmseitenformat long
notlong
  • long: lange Bildschirme wie WQVGA, WVGA, FWVGA
  • notlong: keine langen Bildschirme wie QVGA, HVGA und VGA

In API-Level 4 hinzugefügt.

Diese Auswahl basiert einzig und allein auf dem Seitenverhältnis des Bildschirms. Ein long-Bildschirm ist breiter. Dieses nicht mit der Bildschirmausrichtung übereinstimmt.

Weitere Informationen finden Sie im Konfigurationsfeld screenLayout. der angibt, ob der Bildschirm lang ist.

Runder Bildschirm round
notround
  • round: runde Bildschirme, z. B. ein rundes am Körper tragbares Gerät
  • notround: rechteckige Displays, z. B. Smartphones oder Tablets

In API-Level 23 hinzugefügt.

Siehe auch die isScreenRound()-Konfiguration , die angibt, ob der Bildschirm rund ist.

Breiter Farbraum widecg
nowidecg
  • widecg: Displays mit einer großen Farbgamut, z. B. Display P3 oder AdobeRGB
  • nowidecg: Displays mit einer schmalen Farbskala, z. B. sRGB

In API-Level 26 hinzugefügt.

Siehe auch die isScreenWideColorGamut()-Konfiguration , die angibt, ob der Bildschirm eine große Farbgamut aufweist.

High Dynamic Range (HDR) highdr
lowdr
  • highdr: Displays mit einem High Dynamic Range
  • lowdr: Displays mit einem niedrigen/Standard-Dynamikbereich

In API-Level 26 hinzugefügt.

Siehe auch die isScreenHdr()-Konfiguration , die angibt, ob der Bildschirm HDR-fähig ist.

Bildschirmausrichtung port
land
  • port: Gerät im Hochformat (vertikal)
  • land: Das Gerät wird im Querformat angezeigt (horizontal)

Dies kann sich während der Lebensdauer Ihrer App ändern, wenn der Nutzer die Bildschirm. Informationen dazu, wie sich dies auf Ihre App während der Laufzeit auswirkt, finden Sie unter Konfigurationsänderungen verarbeiten

Weitere Informationen finden Sie im Konfigurationsfeld orientation. die die aktuelle Ausrichtung des Geräts angibt.

UI-Modus car
desk
television
appliance
watch
vrheadset
  • car: Gerät wird in einem Kfz-Dock angezeigt
  • desk: Das Gerät wird in einem Dock angezeigt
  • television: Gerät, das auf einem Fernseher gezeigt wird, mit ein Meter- bei der die Benutzeroberfläche auf einem großen Bildschirm zu sehen ist, weit von ihr entfernt und die Nutzung ist hauptsächlich auf das Steuerkreuz oder andere Interaktion ohne Zeiger
  • appliance: Das Gerät dient als Appliance, mit kein Display
  • watch: Das Gerät hat ein Display und wird am Handgelenk getragen
  • vrheadset: Gerät wird in einer Virtual Reality angezeigt Headset

In API-Level 8 hinzugefügt; Fernseher in API 13 hinzugefügt; Uhr wurde in API 20 hinzugefügt.

Informationen dazu, wie deine App reagieren kann, wenn das Gerät an das Gerät angeschlossen oder die Sie von einem Dock entfernt haben, lesen Sie den Abschnitt Die Status und Typ des Docks

Dies kann sich während der Lebensdauer Ihrer App ändern, wenn der Nutzer das Gerät in einer andocken. Sie können einige dieser Modi mit UiModeManager Informationen dazu, wie sich dies auf Ihre App während der Laufzeit auswirkt, finden Sie unter Konfigurationsänderungen verarbeiten

Nachtmodus night
notnight
  • night: Nachts
  • notnight: tagsüber

In API-Level 8 hinzugefügt.

Das kann sich während der Laufzeit der App ändern, wenn der Nachtmodus aktiviert ist. Automatischer Modus (Standardeinstellung). In diesem Fall ändert sich der Modus je nach Tageszeit. Sie können oder deaktivieren Sie diesen Modus mit UiModeManager. Informationen dazu, wie sich dies auf Ihre App während der Laufzeit auswirkt, finden Sie unter Konfigurationsänderungen verarbeiten

Bildschirm-Pixeldichte (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
nnndpi
  • ldpi: Bildschirme mit niedriger Punktdichte; etwa 120 dpi.
  • mdpi: Bildschirme mittlerer Dichte (auf herkömmlichen HVGA) ungefähr 160 dpi.
  • hdpi: HD-Bildschirme; ca. 240 dpi haben.
  • xhdpi: Displays mit besonders hoher Dichte; ca. 320 dpi. In API hinzugefügt Stufe 8.
  • xxhdpi: Displays mit besonders hoher Dichte; etwa 480 dpi. In API hinzugefügt Stufe 16.
  • xxxhdpi: Verwendung in besonders hoher Dichte (nur Launcher-Symbol – siehe Verschiedene Pixeldichten unterstützen); ca. 640 dpi. In API-Level 18 hinzugefügt.
  • nodpi: wird für Bitmapressourcen verwendet, die nicht skaliert werden sollen an die Gerätedichte anzupassen.
  • tvdpi: Bildschirme irgendwo zwischen mdpi und hdpi; ca. 213 dpi. Dies gilt nicht als „primär“ Dichtegruppe. Es ist hauptsächlich für 720p-Fernseher gedacht und für die meisten Apps nicht. Verwenden Sie für 1080p-TV-Panel xhdpi und für 4K-Fernsehfelder xxxhdpi. In API-Level 13 hinzugefügt.
  • anydpi: entspricht allen Bildschirmdichten und hat Vorrang vor andere Kennzeichner. Dies ist nützlich für Vektor-Drawables In API-Level 21 hinzugefügt.
  • nnndpi: wird verwendet, um nicht standardmäßige Punktdichten darzustellen, wobei nnn ist eine positive Ganzzahl für die Bildschirmdichte. Dieses wird in den meisten Fällen nicht verwendet. Die Verwendung von Standard-Dichte-Buckets verringert den Aufwand für die Unterstützung der verschiedenen Bildschirmdichten auf dem Markt.

Es gibt ein Skalierungsverhältnis von 3:4:6:8:12:16 zwischen den sechs primären Dichten (ohne die tvdpi-Dichte). Eine 9:9-Bitmap in ldpi hat also 12 x 12 in mdpi, 18 x 18 in hdpi, 24 x 24 in xhdpi usw.

Hinweis:Die Verwendung eines Dichte-Qualifiers impliziert nicht, dass der Ressourcen nur für Bildschirme mit dieser Dichte verfügbar. Wenn Sie keine Alternative angeben, mit Qualifier, die besser zur aktuellen Gerätekonfiguration passen, welche Ressourcen am besten sind.

Weitere Informationen zum Umgang mit verschiedenen Bildschirmdichten und dazu, wie Android Ihre Bitmaps an die aktuelle Dichte anpassen, siehe Bildschirmkompatibilität

Touchscreentyp notouch
finger
  • notouch: Gerät hat keinen Touchscreen.
  • finger: Das Gerät hat einen Touchscreen, der für Folgendes gedacht ist: über die Richtungsinteraktion des Fingers der Nutzenden.

Weitere Informationen finden Sie im Konfigurationsfeld touchscreen. die den Typ des Touchscreens des Geräts angibt.

Tastaturverfügbarkeit keysexposed
keyshidden
keyssoft
  • keysexposed: Das Gerät verfügt über eine Tastatur. Wenn das Gerät über eine aktiviert ist, was wahrscheinlich ist. Sie wird auch dann verwendet, nicht sichtbar ist oder wenn das Gerät keine Hardwaretastatur hat. Wenn keine Software vorhanden ist oder deaktiviert ist, wird diese Funktion nur verwendet, exponiert sind.
  • keyshidden: Gerät hat eine Hardwaretastatur, diese ist jedoch ausgeblendet und auf dem Gerät keine Softwaretastatur aktiviert ist.
  • keyssoft: Das Gerät hat eine Softwaretastatur, unabhängig davon, ob es sich um eine sichtbar sind oder nicht.

Wenn Sie keysexposed-Ressourcen angeben, aber nicht keyssoft verwendet das System die keysexposed-Ressourcen unabhängig davon, ob ein Tastatur sichtbar ist, solange im System eine Softwaretastatur aktiviert ist.

Das kann sich während der Lebensdauer deiner App ändern, wenn der Nutzer eine Hardware öffnet Tastatur. Informationen dazu, wie sich dies auf Ihre App während der Laufzeit auswirkt, finden Sie unter Konfigurationsänderungen verarbeiten

Sehen Sie sich auch die Konfigurationsfelder hardKeyboardHidden und keyboardHidden an, die die Sichtbarkeit einer Hardware angeben. Tastatur und die Sichtbarkeit jeder Art von Tastatur (einschließlich Software).

Primäre Texteingabemethode nokeys
qwerty
12key
  • nokeys: Gerät hat keine Hardwareschlüssel für die Texteingabe.
  • qwerty: Gerät hat eine QWERTY-Tastatur für die Hardware, die für die Nutzer oder nicht.
  • 12key: Gerät hat eine 12-Tasten-Hardware-Tastatur, unabhängig davon, ob sie für den Nutzer sichtbar ist oder nicht.

Weitere Informationen finden Sie im Konfigurationsfeld keyboard. das die primäre verfügbare Texteingabemethode angibt.

Plattformversion (API-Level) Beispiele:
v3
v4
v7
usw.

Das vom Gerät unterstützte API-Level. Beispiel: v1 für API-Ebene 1 (Geräte mit Android 1.0 oder höher) und v4 für API-Level 4 (Geräte mit Android 1.6 oder höher). Weitere Informationen zu diesen Werten finden Sie im Dokument Android-API-Ebenen.

Hinweis:Nicht alle Android-Versionen unterstützen alle Kennzeichner. Implizit einen neuen Qualifizierer verwenden fügt den Plattformversions-Qualifier hinzu, sodass ältere Geräte ihn ignorieren können. Wenn Sie beispielsweise Der Qualifizierer w600dp enthält automatisch den Qualifizierer v13, da der Qualifier für verfügbare Breite war in API-Ebene 13 neu. Um Probleme zu vermeiden, fügen Sie immer eine Reihe von Standardressourcen (eine Gruppe von Ressourcen ohne Qualifier) Weitere Informationen finden Sie in der zum Thema Die optimale Gerätekompatibilität mit Ressourcen

Regeln für Qualifizierernamen

Im Folgenden finden Sie einige Regeln zur Verwendung von Namen für Konfigurationsqualifizierer:

  • Sie können mehrere Qualifizierer für eine einzelne Gruppe von Ressourcen angeben, die durch Bindestriche getrennt sind. Für Beispiel: drawable-en-rUS-land gilt für Geräte im US-Englisch im Querformat Ausrichtung.
  • Die Qualifier müssen in der in Tabelle 2 aufgeführten Reihenfolge angegeben werden.
    • Falsch: drawable-hdpi-port/
    • Richtig: drawable-port-hdpi/
  • Alternative Ressourcenverzeichnisse können nicht verschachtelt werden. Zum Beispiel können Sie keine res/drawable/drawable-en/
  • Bei den Werten wird die Groß- und Kleinschreibung nicht berücksichtigt. Der Ressourcen-Compiler konvertiert Verzeichnisnamen vor der Verarbeitung in Kleinbuchstaben, um Probleme zu vermeiden, wenn die Groß-/Kleinschreibung nicht berücksichtigt wird. Dateisysteme. Die Großschreibung in den Namen dient nur der besseren Lesbarkeit.
  • Für jeden Qualifizierertyp wird nur ein Wert unterstützt. Wenn Sie beispielsweise die gleichen Drawable-Dateien für Spanien und Frankreich haben, ist es nicht möglich, ein Verzeichnis namens drawable-es-fr/ Stattdessen benötigen Sie zwei Ressourcenverzeichnisse, drawable-es/ und drawable-fr/, die die entsprechenden Dateien enthalten. Sie müssen die Dateien jedoch nicht an beiden Speicherorten duplizieren. Stattdessen müssen Sie einen Alias für eine Ressource erstellen, wie im Abschnitt Erstellen Alias-Ressourcen.

Nachdem Sie alternative Ressourcen in Verzeichnissen mit dem Namen werden die Ressourcen in Ihrer App basierend auf den aktuelle Gerätekonfiguration Jedes Mal, wenn eine Ressource angefordert wird, sucht Android nach alternativen Ressourcenverzeichnisse, die die angeforderte Ressourcendatei enthalten, und sucht dann die Ressource mit bester Übereinstimmung.

Wenn es keine passenden Ressourcen gibt eine bestimmte Gerätekonfiguration hat, verwendet Android die entsprechenden Standardressourcen – Gruppe von Ressourcen für einen bestimmten Ressourcentyp, der keine Konfiguration enthält auswählen.

Alias-Ressourcen erstellen

Wenn Sie eine Ressource haben, die Sie für mehr als ein Gerät verwenden möchten Konfiguration, aber Sie möchten sie nicht als Standardressource bereitstellen. Sie müssen nicht dasselbe Ressource in mehreren alternativen Ressourcenverzeichnissen. Stattdessen können Sie ein Alternative Ressource, die als Alias für eine Ressource fungiert, die in Ihrem Standardressourcenverzeichnis gespeichert ist.

Hinweis:Nicht alle Ressourcen bieten einen Mechanismus, mit dem Sie Alias zu einer anderen Ressource zu erstellen. Insbesondere Animationen, Menü, Raw und andere nicht spezifizierte Ressourcen im Verzeichnis xml/ bieten diese Funktion nicht.

Angenommen, Sie haben das App-Symbol icon.png und benötigen eine eindeutige Version von für verschiedene Sprachen. Für zwei Sprachen, Englisch-Kanada und Französisch-Kanada, dieselbe Version verwenden. Sie müssen nicht dasselbe Bild kopieren, in das Ressourcenverzeichnis für Englisch-Kanada und Französisch-Kanada. Stattdessen können Sie das Bild, das für beide verwendet wird, unter einem anderen Namen speichern. icon.png, z. B. icon_ca.png, und geben Sie im Standardverzeichnis res/drawable/. Erstellen Sie dann eine icon.xml-Datei in res/drawable-en-rCA/ und res/drawable-fr-rCA/, die auf icon_ca.png verweist. Ressource mithilfe des Elements <bitmap>. So können Sie nur eine Version des PNG-Datei und zwei kleine XML-Dateien, die darauf verweisen. Beispiele finden Sie in den folgenden Abschnitten. .

Drawable

Verwende das <drawable>-Element, um einen Alias für ein vorhandenes Drawable zu erstellen:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="icon">@drawable/icon_ca</drawable>
</resources>

Wenn Sie diese Datei alternativ als icon.xml speichern Ressourcenverzeichnis wie res/values-en-rCA/, ist es kompiliert. in eine Ressource umwandeln können, auf die Sie als R.drawable.icon verweisen können, Es handelt sich dabei um einen Alias für die Ressource R.drawable.icon_ca, gespeichert in res/drawable/

Layout

Verwenden Sie <include>, um einen Alias für ein vorhandenes Layout zu erstellen. -Element, das in einem <merge> eingeschlossen ist:

<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>

Wenn Sie diese Datei als main.xml speichern, wird sie in eine Ressource kompiliert, auf die Sie verweisen können. als R.layout.main, ist aber eigentlich ein Alias für R.layout.main_ltr .

Strings und andere einfache Werte

Wenn Sie einen Alias für einen vorhandenen String erstellen möchten, verwenden Sie die Ressourcen-ID der gewünschten string als Wert für die neue Zeichenfolge:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>

Die Ressource R.string.hi ist jetzt ein Alias für die R.string.hello.

Andere einfache Werte auf die gleiche Weise, wie z. B. Farben:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#f00</color>
    <color name="highlight">@color/red</color>
</resources>

Auf Anwendungsressourcen zugreifen

Sobald Sie eine Ressource in Ihrer Bewerbung angegeben haben, können Sie sie anwenden, indem Sie und verweist dabei auf seine Ressourcen-ID. Alle Ressourcen-IDs sind in der Klasse R Ihres Projekts definiert, die das aapt-Tool automatisch generiert.

Wenn Ihre Anwendung kompiliert ist, generiert aapt die Klasse R, die folgende Elemente enthält: Ressourcen-IDs für alle Ressourcen im Verzeichnis res/ Für jeden Ressourcentyp gibt es eine abgeleitete R-Klasse wie R.drawable für alle Drawable-Ressourcen. Für jede Ressource dieses Typs gibt es statische Ganzzahl, z. B. R.drawable.icon. Diese Ganzzahl ist die Ressourcen-ID, die Sie verwenden können um Ihre Ressource abzurufen.

Obwohl in der Klasse R die Ressourcen-IDs angegeben werden, müssen Sie um eine Ressourcen-ID zu ermitteln. Eine Ressourcen-ID besteht immer aus Folgendem:

  • Ressourcentyp: Jede Ressource ist in einem "Typ" gruppiert, z. B. string, drawable und layout. Weitere Informationen zu den verschiedenen Typen finden Sie unter Ressourcentypen – Übersicht.
  • Den Ressourcennamen, entweder der Dateiname ohne die Erweiterung oder den Wert im XML-Attribut android:name, wenn das Attribut Ressource ein einfacher Wert wie ein String ist.

Es gibt zwei Möglichkeiten, auf eine Ressource zuzugreifen:

  • Im Code: Verwenden Sie eine statische Ganzzahl aus einer Unterklasse Ihrer R. Klasse, zum Beispiel:
    R.string.hello

    string ist der Ressourcentyp und hello der Ressourcenname. Es gibt viele Android-APIs, die auf Ihre Ressourcen zugreifen können, wenn Sie eine Ressourcen-ID in diesem Format angeben. Weitere Informationen Weitere Informationen finden Sie im Abschnitt Auf Ressourcen im Code zugreifen.

  • In XML: mit einer speziellen XML-Syntax, die Die in Ihrer R-Klasse definierte Ressourcen-ID, z. B.:
    @string/hello

    string ist der Ressourcentyp und hello der Ressourcenname. Sie können diese Syntax in einer XML-Ressource an jeder Stelle, an der ein Wert erwartet wird, den Sie in einer Ressource angeben. Weitere Informationen Weitere Informationen findest du im Abschnitt Auf Ressourcen über XML zugreifen.

Auf Ressourcen im Code zugreifen

Sie können eine Ressource im Code verwenden, indem Sie die Ressourcen-ID als Methodenparameter übergeben. Für Sie können z. B. festlegen, dass ein ImageView die res/drawable/myimage.png verwendet. Ressource mit setImageResource():

Kotlin

val imageView = findViewById(R.id.myimageview) as ImageView
imageView.setImageResource(R.drawable.myimage)

Java

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

Sie können einzelne Ressourcen auch mithilfe von Methoden in Resources abrufen. Dabei können Sie eine Instanz von mit getResources().

Syntax

Hier ist die Syntax, um im Code auf eine Ressource zu verweisen:

[<package_name>.]R.<resource_type>.<resource_name>
  • <package_name> ist der Name des Pakets, in dem sich die Ressource befindet (nicht erforderlich, wenn auf Ressourcen aus Ihrem eigenen Paket verwiesen wird).
  • <resource_type> ist die abgeleitete R-Klasse des Ressourcentyps.
  • <resource_name> ist entweder der Dateiname der Ressource ohne die Erweiterung oder den Attributwert android:name im XML-Element, für einfache Werte.

Für Weitere Informationen zu den einzelnen Ressourcentypen und wie Sie darauf verweisen können, finden Sie unter Ressourcentypen – Übersicht.

Anwendungsfälle

Es gibt viele Methoden, die einen Ressourcen-ID-Parameter akzeptieren. Sie können Ressourcen auch mit Methoden in Resources. Ich kann eine Instanz von Resources mit Context.getResources() abrufen.

Hier einige Beispiele für den Zugriff auf Ressourcen im Code:

Kotlin

// Load a background for the current screen from a drawable resource.
window.setBackgroundDrawableResource(R.drawable.my_background_image)

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID.
window.setTitle(resources.getText(R.string.main_title))

// Load a custom layout for the current screen.
setContentView(R.layout.main_screen)

// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in))

// Set the text on a TextView object using a resource ID.
val msgTextView = findViewById(R.id.msg) as TextView
msgTextView.setText(R.string.hello_message)

Java

// Load a background for the current screen from a drawable resource.
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID.
getWindow().setTitle(getResources().getText(R.string.main_title));

// Load a custom layout for the current screen.
setContentView(R.layout.main_screen);

// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in));

// Set the text on a TextView object using a resource ID.
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

Achtung:Ändern Sie die Datei R.java nicht von Hand. Sie wird vom aapt-Tool generiert, wenn Ihr Projekt kompiliert werden. Alle Änderungen werden bei der nächsten Kompilierung überschrieben.

Über XML auf Ressourcen zugreifen

Sie können Werte für einige XML-Attribute und -Elemente mithilfe einer auf eine vorhandene Ressource verweisen. Sie tun dies oft beim Erstellen von Layoutdateien, Strings und Bilder für Ihre Widgets bereitstellen.

Wenn Sie Ihrem Layout beispielsweise ein Button hinzufügen, verwenden Sie Eine String-Ressource für den Schaltflächentext:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />

Syntax

Hier ist die Syntax für den Verweis auf eine Ressource in einer XML-Ressource:

@[<package_name>:]<resource_type>/<resource_name>
  • <package_name> ist der Name des Pakets, in dem sich die Ressource befindet (nicht erforderlich, wenn auf Ressourcen aus demselben Paket verwiesen wird).
  • <resource_type> ist der/die/das R für den Ressourcentyp.
  • <resource_name> ist entweder der Dateiname der Ressource. ohne die Erweiterung oder den Attributwert android:name im XML-Element, für einfache Werte.

Für Weitere Informationen zu den einzelnen Ressourcentypen und wie Sie darauf verweisen können, finden Sie unter Ressourcentypen – Übersicht.

Anwendungsfälle

In einigen Fällen musst du eine Ressource für einen Wert in XML verwenden, z. B. um ein Drawable-Bild anzuwenden. in einem Widget. Sie können aber auch eine Ressource in XML an jeder Stelle verwenden, die einen einfachen Wert akzeptiert. Für Angenommen, Sie haben die folgende Ressourcendatei, die eine color-Ressource und eine string resource enthält:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

Sie können diese Ressourcen in der folgenden Layoutdatei verwenden, um die Textfarbe und Textzeichenfolge:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/opaque_red"
    android:text="@string/hello" />

In diesem Fall müssen Sie den Paketnamen nicht in der Ressourcenreferenz angeben, da der Ressourcen aus Ihrem eigenen Paket. Bis auf eine Systemressource verweisen, müssen Sie den Paketnamen angeben, wie im folgenden Beispiel gezeigt:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@android:color/secondary_text_dark"
    android:text="@string/hello" />

Hinweis:Verwenden Sie immer Stringressourcen, damit deine App für andere Sprachen lokalisiert werden kann. Weitere Informationen zum Erstellen z. B. lokalisierte Strings – siehe Alternativen Ressourcen Einen vollständigen Leitfaden zur Lokalisierung Ihrer App für andere Sprachen finden Sie Siehe App lokalisieren.

Sie können sogar Ressourcen in XML verwenden, um Aliasse zu erstellen. Sie können beispielsweise eine Drawable-Ressource, die ein Alias für eine andere Drawable-Ressource ist:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/other_drawable" />

Das klingt überflüssig, kann aber bei der Verwendung einer alternativen Ressource sehr nützlich sein. Weitere Informationen Weitere Informationen finden Sie im Abschnitt Alias-Ressourcen erstellen.

Referenzstilattribute

Mit einer Stilattributressource können Sie auf den Wert verweisen eines Attributs im aktuell angewendeten Design. Wenn Sie auf ein Stilattribut verweisen, das Aussehen von UI-Elementen anpassen, indem Sie sie so gestalten, dass sie den Standardvarianten entsprechen, die vom Design ändern, anstatt einen hartcodierten Wert anzugeben. Auf ein Stilattribut verweisen sagt im Grunde: „Verwenden Sie den Stil, der durch dieses Attribut im aktuellen Design definiert wird.“

Um auf ein Stilattribut zu verweisen, ist die Namenssyntax fast identisch mit der normalen Ressource. Format, aber anstelle von "at" (@) und verwenden Sie ein Fragezeichen (?). Die Ressourcentypabschnitt ist optional. Die Referenzsyntax lautet also wie folgt:

?[<package_name>:][<resource_type>/]<resource_name>

So können Sie zum Beispiel auf ein Attribut verweisen, um die Textfarbe so festzulegen, Sekundäre Textfarbe des Systemdesigns:

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

Hier gibt das Attribut android:textColor den Namen eines Stilattributs an. im aktuellen Design. Android verwendet jetzt den Wert, der auf android:textColorSecondary angewendet wird style-Attribut als Wert für android:textColor in diesem Widget. Da das System in diesem Kontext eine Attributressource erwartet wird, müssen Sie den Typ nicht explizit angeben, ?android:attr/textColorSecondary Sie können den Typ attr ausschließen.

Auf Originaldateien zugreifen

Es kommt zwar selten vor, es kann jedoch sein, dass Sie auf die Originaldateien und -verzeichnisse zugreifen müssen. Wenn ja, Das Speichern Ihrer Dateien in res/ funktioniert nicht, da die einzige Möglichkeit zum Lesen einer Ressource aus res/ ist die Ressourcen-ID. Stattdessen können Sie Ihre Ressourcen in der assets/-Verzeichnis.

Dateien, die im Verzeichnis assets/ gespeichert sind, erhalten keine Ressource ID, sodass Sie nicht über die R-Klasse oder in XML-Ressourcen darauf verweisen können. Stattdessen können Sie wie mit einem normalen Dateisystem im Verzeichnis assets/ abfragen und Rohdaten AssetManager.

Wenn Sie jedoch nur Rohdaten (z. B. Video- oder Audiodateien) lesen möchten, Speichern Sie dann die Datei im Verzeichnis res/raw/ und lesen Sie mit openRawResource() einen Bytestream.

Auf Plattformressourcen zugreifen

Android enthält eine Reihe von Standardressourcen wie Stile, Designs und Layouts. Bis Zugriff auf diese Ressourcen haben, qualifizieren Sie Ihre Ressourcenreferenz mit dem Paketname „android“. Android bietet beispielsweise eine Layout-Ressource, die Sie für Elemente in einem ListAdapter auflisten:

Kotlin

listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)

Java

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

In diesem Beispiel ist simple_list_item_1 eine Layoutressource, die vom für Artikel in einem ListView. Sie können diese Funktion verwenden, Ihr eigenes Layout für Listenelemente.

Optimale Gerätekompatibilität mit Ressourcen

Damit deine App mehrere Gerätekonfigurationen unterstützt, stellen Sie immer Standardressourcen für jeden Ressourcentyp bereit, den Ihre Anwendung verwendet.

Wenn Ihre App beispielsweise mehrere Sprachen unterstützt, geben Sie immer ein values/-Verzeichnis ohne Sprach- und Regionsqualifizierer an, in dem Ihre Strings gespeichert sind. Wenn Sie stattdessen alle Zeichenfolgendateien in Verzeichnissen mit einem Sprach- und Regionsqualifizierer enthält, stürzt Ihre App beim Ausführen auf einem Gerät, das auf eine Sprache eingestellt ist, die von Ihren Strings nicht unterstützt wird.

Solange Sie Standard- values/ Ressourcen hat, wird deine App ordnungsgemäß ausgeführt, auch wenn der Nutzer die präsentierte Sprache zu verstehen. Das ist besser als ein Absturz.

Wenn Sie je nach Bildschirmausrichtung unterschiedliche Layoutressourcen bereitstellen, eine Ausrichtung als Standardeinstellung aus. Anstatt beispielsweise Layoutressourcen in layout-land/ für Querformat und layout-port/ für Hochformat bereitzustellen, belassen Sie eine Standardeinstellung, z. B.: layout/ für Querformat und layout-port/ für Hochformat.

Die Bereitstellung von Standardressourcen ist nicht nur wichtig, weil Ihre App auf einer nicht erwartet hätten, sondern weil neue Android-Versionen manchmal Konfigurationsqualifizierer, die ältere Versionen nicht unterstützen. Wenn Sie einen neuen Ressourcenqualifizierer verwenden, der Code mit älteren Android-Versionen kompatibel ist, kommt es dann zum Einsatz, wenn eine ältere Android führt deine App aus und sie stürzt ab, wenn du keine Standardressourcen angibst, Ressourcen, die mit dem neuen Qualifier benannt sind, können nicht verwendet werden.

Beispiel: Dein minSdkVersion ist auf 4 gesetzt und du qualifizieren alle deine Drawable-Ressourcen mit dem Nachtmodus (night oder notnight, die in der API hinzugefügt wurden) Level 8), kann ein Gerät der API-Ebene 4 nicht auf deine Drawable-Ressourcen zugreifen und stürzt ab. In dieser möchten Sie wahrscheinlich notnight als Standardressourcen verwenden. -Qualifier und platziere deine Drawable-Ressourcen in drawable/ oder drawable-night/.

Kurz gesagt: Um die beste Gerätekompatibilität zu gewährleisten, sollten Sie immer Standard-Apps Ressourcen für die Ressourcen, die Ihre App benötigt, um ordnungsgemäß zu funktionieren. Erstellen Sie dann eine Ressourcen für bestimmte Gerätekonfigurationen mithilfe von Konfigurationsqualifizierern.

Es gibt eine Ausnahme von dieser Regel: Wenn das minSdkVersion deiner App den Wert 4 hat oder Wenn du alternative Drawable-Ressourcen anbietest, benötigst du keine Standard-Drawable-Ressourcen. mit dem Screen Density-Qualifier. Auch ohne Standardeinstellung Drawable-Ressourcen findet Android unter den alternativen Bildschirmdichten und -größen die beste Übereinstimmung. die Bitmaps bei Bedarf an. Um jedoch auf allen Arten von Geräten die besten Ergebnisse zu erzielen, alternative Drawables für alle drei Dichtetypen bereitstellen.

So findet Android die am besten passende Ressource

Wenn Sie eine Ressource anfordern, für die Sie Alternativen anbieten, wählt Android aus, alternative Ressource, die zur Laufzeit verwendet werden soll, je nach aktueller Gerätekonfiguration. Bis zeigen, wie Android eine alternative Ressource auswählt. Nehmen wir an, die folgenden Drawable-Verzeichnisse enthalten jeweils unterschiedliche Versionen desselben Bildes:

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

Gehen wir davon aus, dass die Gerätekonfiguration wie folgt aussieht:

Gebietsschema = en-GB
Bildschirmausrichtung = port
Bildschirmpixeldichte = hdpi
Touchscreentyp = notouch
Primäre Texteingabemethode = 12key

Durch den Vergleich der Gerätekonfiguration mit den verfügbaren alternativen Ressourcen wählt Android Drawables von drawable-en-port.

Das System entscheidet selbst, für welche Ressourcen Logik:

Abbildung 2: Flussdiagramm, das zeigt, wie Android Ressource mit der besten Übereinstimmung.

  1. Entfernen Sie Ressourcendateien, die der Gerätekonfiguration widersprechen.

    Das Verzeichnis drawable-fr-rCA/ wurde entfernt, widerspricht der Sprache en-GB.

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

    Ausnahme:Die Bildschirmpixeldichte ist der Qualifier, der nicht aufgrund eines Widerspruchs eliminiert werden. Die Bildschirmdichte des Geräts ist zwar HDPI, drawable-port-ldpi/ wird nicht eliminiert, weil jede Bildschirmdichte als Übereinstimmung angesehen. Weitere Informationen finden Sie im Hilfeartikel Bildschirmkompatibilität.

  2. Suchen Sie in der Liste den Qualifier mit der nächsthöheren Priorität (Tabelle 2). (Beginnen Sie mit dem Kundencenter.)
  3. Enthält eines der Ressourcenverzeichnisse diesen Qualifier?
    • Falls nein, kehren Sie zu Schritt 2 zurück und sehen Sie sich den nächsten Qualifier an. In diesem Beispiel lautet die Antwort „Nein“ bis der Sprachqualifizierer erreicht ist.
    • Falls ja, fahren Sie mit Schritt 4 fort.
  4. Entfernen Sie Ressourcenverzeichnisse, die diesen Qualifizierer nicht enthalten. In diesem Beispiel hat das System entfernt alle Verzeichnisse, die keinen Sprachqualifizierer enthalten:
    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    Ausnahme:Wenn es sich bei dem betreffenden Qualifier um die Bildschirmpixeldichte handelt, Android wählt die Option aus, die der Bildschirmdichte des Geräts am ehesten entspricht. Im Allgemeinen bevorzugt Android die Verkleinerung eines größeren Originalbildes. das Originalbild. Weitere Informationen finden Sie unter Bildschirm Kompatibilitätsübersicht.

  5. Wiederholen Sie die Schritte zwei, drei und vier, bis nur noch ein Verzeichnis übrig ist. In diesem Beispiel Ausrichtung ist der nächste Qualifizierer, für den es Übereinstimmungen gibt. Ressourcen, die keine Bildschirmausrichtung angeben, werden daher entfernt:
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    

    Das verbleibende Verzeichnis ist drawable-en-port.

Obwohl dieser Vorgang für jede angeforderte Ressource ausgeführt wird, optimiert das System Aspekte davon zu verstehen. Eine solche Optimierung besteht darin, dass, sobald die Gerätekonfiguration bekannt ist, alternative Ressourcen eliminieren, die niemals mithalten können. Wenn beispielsweise die Konfiguration Sprache Englisch ist, ist jedes Ressourcenverzeichnis, für das der Sprachqualifizierer dass nur Englisch nicht in den Ressourcenpool aufgenommen wird, Ressourcenverzeichnis ohne den Sprachqualifizierer enthalten.

Bei der Auswahl von Ressourcen basierend auf den Bildschirmgrößen-Qualifier (Bildschirmgrößen) verwendet das System Ressourcen für einen Bildschirm konzipiert, der kleiner als der aktuelle Bildschirm ist, wenn es keine passenden Ressourcen gibt. Ein großer Bildschirm verwendet beispielsweise bei Bedarf normale Bildschirmressourcen.

Wenn jedoch sind nur Ressourcen größer als der aktuelle Bildschirm, verwendet sie nicht und Ihre App stürzt ab, wenn keine anderen Ressourcen mit dem Gerät übereinstimmen. Konfiguration. Das ist beispielsweise der Fall, wenn alle Layoutressourcen mit dem Qualifier xlarge getaggt sind. aber das Gerät ist ein normaler Bildschirm.

Hinweis:Der Vorrang des Qualifier (in Tabelle 2) ist wichtiger. als die Anzahl der Kennzeichner, die genau mit dem Gerät übereinstimmen. Im vorherigen Beispiel haben wir im vierten Schritt Die letzte Option in der Liste enthält drei Qualifier, die genau mit dem Gerät übereinstimmen (Ausrichtung, Touchscreen-Typ und Eingabemethode), während drawable-en nur einen Parameter hat, der mit (Sprache) Sprache hat jedoch eine höhere Priorität als diese anderen Kennzeichner. drawable-port-notouch-12key wird eliminiert.