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

Für eine lange Zeit habe ich Resource Folders für 4 verschiedene Dichten erklärt:

  • Ziehbar-ldpi
  • Drawable-mdpi
  • Ziehbar-hdpi
  • Drawable-xhdpi

Im XML-Layout des Layouts verwende ich feste Breiten (immer noch dichteunabhängig) wie 128dp für diese Grafiken.

  • IndexOutOfBoundsException in TabLayout im Android-Support-Design lib
  • HttpURLConnection setConnectTimeout () hat keine Wirkung
  • Android: Ungültige Verwendung von SingleClientConnManager: Verbindung noch zugewiesen
  • Android 2.3 hat niedrigere VM-Budget als 2.1 und 2.2?
  • PopupMenu ist nicht ordnungsgemäß in RecyclerView positioniert
  • Wie soll ein Fragment über das Ergebnis einer asynchronen Aufgabe informiert werden?
  • Wenn jedoch immer mehr Großbildtelefone und vor allem Tabletten eingeführt wurden, funktionierte dieser Ansatz nicht mehr. Obwohl Sie auf diese Weise dichteunabhängige Ressourcen zur Verfügung stellen, sieht das Layout auf großen Bildschirmen nicht gut aus.

    Deshalb denke ich, dass ich Dimension hinzufügen muss, die von der Bildschirmgröße abhängen, für die Verwendung in den XML-Layouts, zB:

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

    Aber bedeutet das, dass ich die 4 Dichte Container fallen lassen sollte? Oder brauche ich 16 Ressourcen-Ordner, dh eine für jede Kombination von Dichte und Größe?

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

  • Wie lösche ich einen Entwurf von Google Play Developer Console?
  • Ist es möglich, die Tasten über die Breite eines androiden Linearlayouts gleichmäßig zu verteilen
  • Wie drucken lokale zeitzone in posix format in java (android)?
  • Was ist der Zweck eines Delegationsmusters?
  • Was versteht man unter metadaten in android?
  • Android Spinner OnItemSelected nicht mit dem gleichen Element aufgerufen
  • 2 Solutions collect form web for “Dichte-spezifische Layouts vs. Größen-spezifische Layouts in Android”

    Ziehbare und Layouts sind anders. Um deine Frage zu beantworten, solltest du aufhören, diese Dichten zu unterstützen. Ja, aber du solltest noch xdpi und hdpi unterstützen Romain Guy hat vor kurzem gesagt, dass moderne Geräte wie der Nexus 7 (bei einem tvpi) die Assets richtig genug skalieren können, dass mdpi nicht wirklich benötigt wird. Und niemand benutzt ldpi mehr Zuletzt habe ich gesehen, ist weniger als 2% des Marktes.

    Über Layouts. Ein Nexus 7 (1280×800 tvdpi) würde etwas aus den Werten-w1024dp verwenden, aber immer noch Vermögenswerte aus dem drawable-hdpi-Ordner. Diese beiden schließen sich nicht gegenseitig aus. Etwas wie ein S3 würde auch aus den Werten-w1024dp ziehen, aber verwenden Sie drawable-xdpi. Sie müssen nur ein alternatives Layout anbieten, wenn Ihr Use-Case es verlangt.

    Also brauchst du 16 verschiedene Dinge? Nein. Du brauchst xdpi & hdpi (wenn nicht mdpi). Vielleicht möchten Sie alternative Layouts für verschiedene Größen enthalten. Sie können so genau wie Sie wollen oder als generisch. Es sei denn, du machst eine Hybrid-App für beide Telefon & Tablet (7 & 10 in) Sie brauchen wahrscheinlich nicht viele xxxx-sizexxx Ordner.

    Im XML-Layout des Layouts verwende ich feste Breiten (immer noch dichteunabhängig) wie 128dp für diese Grafiken.

    Dies ist wahrscheinlich eine Quelle für Ihre Probleme. Ihre Layouts sollten so flüssig wie möglich mit wrap_content und match_parent sein. Feste Größen sollten für die Polsterung um die Seiten und das Bild reserviert werden, wo Sie die Größe vor der Zeit kennen. Wenn Sie dies tun, sollte Ihr Layout bei jeder Größe von einer kleinen 320 x 200 bis zu einer GTV-Größe anständig aussehen.

    1) Hinsichtlich der Dimensionen in Ihren Layouts (Werte / dimens.xml):

    Werte Werte-w600dp Werte-w720dp Werte-w1024dp

    Aber bedeutet das, dass ich die 4 Dichte Container fallen lassen sollte? Oder brauche ich 16 Ressourcen-Ordner, dh eine für jede Kombination von Dichte und Größe?

    Nein, du brauchst keine unterschiedlichen Dimensionen pro dpi-Eimer (hdpi / xhdpi) zur Verfügung zu stellen, da die Dimensionen bereits auf der Basis des Geräts auf- oder abgebaut werden (wenn du dp anstelle von px benutzt). Also für Dimensionen müssen Sie nur Werte für Geräte mit unterschiedlichen Größen (daher der Name, Werte – kleinste mögliche Breite -600-dp). Weil du nicht 16dp Polsterung auf einem Telefon und 16dp auf einer 10 "Tablette auch willst.Sie ​​möchten 64dp stattdessen und nein, es spielt keine Rolle, welche Dichte das Gerät hat.Es muss immer noch die gleiche Polsterung haben Auf die jeweilige Gerätebreite, also für dimens, musst du nur an die tatsächlichen physikalischen Dimensionen des Gerätes denken

    2) Bei der Zeichnung Skalierung für verschiedene Auflösungen (drawables / xdpi): Das System skaliert sie entsprechend für das Gerät. Du brauchst dir keine Sorgen zu machen. Außerdem musst du hier keine weiteren Eimer hinzufügen. Verwenden Sie einfach mdpi / hdpi / xhdpi und vielleicht xxhdpi, weil viele neue Geräte die neue Dichte in der Zukunft nutzen werden.

    Fazit: Es gibt 2 verschiedene UI-Bauteile, die je nach 2 verschiedenen Regeln variieren: Ziehböden basierend auf Bildschirmdichte und Abmessungen basierend auf Bildschirmgröße. Versteh dich nicht für den anderen und denk, du brauchst Dutzende von Eimern im Werteordner, denn das ist nicht nur falsch, es ist nur umwerfend.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.