Dichte-spezifische Layouts vs. Größen-spezifische Layouts in Android

9

Seit einiger Zeit deklariere ich Ressourcenordner für vier verschiedene Dichten:

  • Zeichen-ldpi
  • Zeichen-mdpi
  • Zeichen-hdpi
  • Zeichen-xhdpi

In der XML-Datei des Layouts habe ich feste Breiten verwendet (obwohl diese immer noch dichteunabhängig sind), z. B. 128dp für diese Grafiken.

Als jedoch immer mehr Großbildschirme und insbesondere Tablets eingeführt wurden, funktionierte dieser Ansatz nicht mehr. Obwohl Sie auf diese Weise dichteunabhängige Ressourcen bereitstellen, wird das Layout auf großen Bildschirmen nicht gut aussehen.

Aus diesem Grund denke ich, dass ich Dimension -Ressourcen hinzufügen muss, die von der Bildschirmgröße abhängen, um sie in den XML-Layouts zu verwenden, z. B .:

  • Werte
  • Werte-w600dp
  • Werte-w720dp
  • Werte-w1024dp

Aber heißt das, dass ich diese 4-Dichte-Container fallen lassen sollte? Oder muss ich 16 Ressourcenordner bereitstellen, d. H. Einen für jede Kombination aus Dichte und Größe?

Ich kann keine gute Hilfe in der Android-Dokumentation zu diesem Thema finden.

    
caw 21.01.2013, 22:35
quelle

2 Antworten

4

Zeichen und Layouts sind unterschiedlich. Um Ihre Frage zu beantworten, sollten Sie aufhören, diese Dichten zu unterstützen. Ja, aber du solltest immer noch xdpi und hdpi unterstützen. Romain Guy hat kürzlich gesagt, dass moderne Geräte wie das Nexus 7 (bei einem TVPI) die Werte so skalieren können, dass mdpi nicht wirklich benötigt wird. Und niemand benutzt ldpi mehr. Zuletzt schaute ich, war weniger als 2% des Marktes.

Über Layouts. Ein Nexus 7 (1280x800 tvdpi) würde etwas von den Werten-w1024dp verwenden, aber immer noch Assets aus dem Drawable-hdpi-Ordner bekommen. Diese beiden schließen sich nicht gegenseitig aus. Etwas wie ein S3 würde auch aus den Werten w1024dp ziehen, aber drawable-xdpi verwenden. Sie müssen nur ein alternatives Layout bereitstellen, wenn Ihr Anwendungsfall dies erfordert.

Also brauchst du 16 verschiedene Dinge? Nein. Sie brauchen xdpi & amp; hdpi (wenn nicht mdpi). Sie können alternative Layouts für verschiedene Größen hinzufügen. Sie können so spezifisch sein wie Sie wollen oder als generisch. Es sei denn, Sie tun eine Hybrid-App für beide Telefon & amp; Tablet (7 & amp; 10 in) Sie brauchen wahrscheinlich nicht viele xxxx-sizexxx Ordner.

  

In der XML-Datei des Layouts habe ich feste Breiten verwendet (obwohl diese immer noch dichteunabhängig sind), z. B. 128 dpi für diese Grafiken.

Dies ist wahrscheinlich eine Quelle Ihrer Probleme. Ihre Layouts sollten so flüssig wie möglich sein, indem Sie wrap_content und match_parent verwenden. Feste Größen sollten für das Auffüllen der Seiten und das Bild reserviert werden, wo Sie die Größe im Voraus kennen. Wenn Sie das tun, sollte Ihr Layout in jeder Größe von einer kleinen 320 x 200 zu einer GTV-Größe anständig aussehen.

    
user123321 24.01.2013, 03:16
quelle
0

1) Bezüglich Dimensionen in Ihren Layouts (values ​​/ dimens.xml):

  

Werte Werte-w600dp Werte-w720dp Werte-w1024dp

     

Aber heißt das, dass ich diese 4 Dichte fallen lassen sollte?   Behälter? Oder muss ich 16 Ressourcenordner bereitstellen, d. H. Einen für   jede Kombination von Dichte und Größe?

Nein, Sie müssen keine unterschiedlichen Dimensionen pro dpi-Bucket (hdpi / xhdpi) angeben, da die Dimensionen basierend auf dem Gerät bereits skaliert werden (wenn Sie dp anstelle von px verwenden). Für Dimensionen müssen Sie nur Werte für Geräte mit unterschiedlichen Größen angeben (daher der Name, die Werte - kleinstmögliche Breite -600-dp). Weil Sie nicht wollen, 16dp Padding auf einem Telefon und 16dp auf einem 10-Zoll-Tablet als auch. Sie würden stattdessen 64dp. Und nein, es ist egal, welche Dichte das Gerät hat. Es muss immer noch die gleiche Polsterung haben Auf der jeweiligen Gerätebreite müssen Sie sich also nur für die Dimensionen des Geräts Gedanken machen.

2) Zeichnungsskalierung für verschiedene Auflösungen (drawables / xdpi): Das System skaliert sie entsprechend für das Gerät. Sie müssen sich darüber keine Sorgen machen. Außerdem müssen Sie hier keine anderen Buckets hinzufügen. Verwenden Sie einfach mdpi / hdpi / xhdpi und vielleicht xxhdpi, da viele neue Geräte in Zukunft die neue Dichte verwenden werden.

Fazit: Es gibt 2 verschiedene UI-Komponenten, die nach 2 verschiedenen Regeln variieren: Zeichen basierend auf Bildschirmdichte und Dimensionen basierend auf der Bildschirmgröße. Verwechsle nicht den einen mit dem anderen und denke, dass du Dutzende von Buckets im Wertordner benötigst, denn das ist nicht nur falsch, es ist einfach unglaublich.

    
Bogdan Zurac 25.01.2013 15:42
quelle

Tags und Links