Android Training: Verschiedene Displaygrößen unterstützen

Aus Android Wiki
Version vom 10. Januar 2016, 03:55 Uhr von FuzzyBot (Diskussion | Beiträge) (Übernehme Bearbeitung einer neuen Version der Quellseite)
Sprachen:

Android kategorisiert Geräte-Bildschirme anhand zwei allgemeiner Eigenschaften: Größe und Pixeldichte. Du solltest erwarten, dass deine App auf Geräte mit unterschiedlichen Größen und Pixeldichten installiert wird. Daher solltest du Ressourcen in deine App einfügen, die deine App-Anzeige auf verschiedenen Bildschirmgrößen und Pixeldichten optimiert.

  • Es gibt vier verallgemeinerte Größen: small, normal, large, xlarge
  • Und vier allgemeine Pixelcihten: low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)

Um verschiedene Layouts und Bitmaps zu deklarieren, welche du für verschiedene Bildschirme verwenden möchtest, musst du diese alternativen Ressourcen in separate Ordner organisieren, ähnlich wie du es für verschiedene Sprach-Zeichenketten machst.

Beachte außerdem, dass die Bildschirmausrichtung (Quer oder Porträt) eine Variation der Bildschirmgröße ist, daher sollten viele Apps ihr Layout überarbeiten, um die Nutzererfahrung in jeder Ausrichtung zu verbessern.

Verschiedene Layouts erstellen

Um die Nutzererfahrung auf verschiedenen Bildschirmgrößen zu verbessern, solltest du eine eigene Layout XML-Datei für jede Bildschirmgröße erstellen, die du unterstützen möchtest. Jedes layout sollte in dem dafür passenden Ressourcen-Ordner gespeichert werden, mit einem Suffix -<screen_size> benannt. Als Beispiel sollte ein eigenes Layout für große Bildschirme unter res/layout-large/ gespeichert werden.

Hinweis: Android skaliert dein Layout automatisch, damit es optimal an die Bildschirmgröße angepasst ist. Daher müssen sich deine Layouts für verschiedene Bildschirmgrößen keine Sorgen um die absoluten Größen von UI Elementen machen, sondern sich auf die Layout-Struktur konzentrieren, welche die Nutzererfahrung beeinflussen (wie bspw. die Größe oder Position von wichtigen Ansichten, relativ zu benachbarten Ansichten).

Beispielsweise beinhaltet dieses Projekt ein Standardlayout und ein alternatives Layout für "große" Bildschirme:

MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml

Die Dateinamen müssen exakt gleich sein, die Inhalte allerdings verschieden, um eine optimierte Oberfläche für die entsprechenden Bildschirmgrößen zur Verfügung zu stellen.

Verweise in deiner App einfach wie üblich auf die Layout-Datei:

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
}

Das System lädt die passende Layout-Datei aus dem entsprechenden Layout-Ordner, basierend auf der Bildschirmgröße des Gerätes, auf welchem die App ausgeführt wird. Mehr Informationen darüber, wie Android die passende Ressource auswählt, ist im Providing Resources Guide verfügbar.

Als ein weiteres Beispiel ist hier ein Projekt mit einem alternativen Layout für das Querformat:

MyProject/
    res/
        layout/
            main.xml
        layout-land/
            main.xml

Standardmäßig wird die layout/main.xml Datei für das Hochformat verwendet.

Wenn du ein spezielles Layout für das Querformat bereitstellen möchtest, einschließlich für große Bildschirme, dann musst du beide Kennzeichner, large und land, verwenden:

MyProject/
    res/
        layout/              # default (portrait)
            main.xml
        layout-land/         # landscape
            main.xml
        layout-large/        # large (portrait)
            main.xml
        layout-large-land/   # large landscape
            main.xml

Hinweis: Android 3.2 und neuer unterstützen eine erweiterte Methode um Bildschirmgrößen zu definieren, welche es dir erlaubt, verschiedene Ressourcen für Bildschirmgrößen festzulegen, basierend auf der minimalen Breite und Höhe an dichteunabhängigen Pixel. Diese Lektion deckt diese neue Technik nicht ab. Für mehr Informationen, lese Designing für mehrere Bildschirme.

Verschiedene Bitmaps erstellen

Du solltest immer bitmap-Ressourcen zur Verfügung stellen, die ordnungsgemäß auf die standardisierten Dichte-Gruppen skalieren: low, medium, high und extra-high. Das hilft dir, eine gute grafische Qualität und Performance auf allen Bildschirm-Dichten zu erreichen.

Um diese Bilder zu erstellen, solltest du mit deiner Ursprungs-Ressource im Vector Format starten und die Bilder für jede Dichte mit folgenden Skalierungen erstellen:

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (baseline)
  • ldpi: 0.75

Das bedeutet, wenn du ein 200x200 Bild für xhdpi Geräte erstellst, solltest du die gleiche Ressource in 150x150 für hdpi, 100x100 für mdpi und 75x75 für ldpi Geräte erstellen.

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (baseline)
  • ldpi: 0.75

This means that if you generate a 200x200 image for xhdpi devices, you should generate the same resource in 150x150 for hdpi, 100x100 for mdpi, and 75x75 for ldpi devices.

Then, place the files in the appropriate drawable resource directory:

MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png

Any time you reference @drawable/awesomeimage, the system selects the appropriate bitmap based on the screen's density.

Note: Low-density (ldpi) resources aren’t always necessary. When you provide hdpi assets, the system scales them down by one half to properly fit ldpi screens.

For more tips and guidelines about creating icon assets for your app, see the Iconography design guide.