Anwendungsskelett zur Unterstützung mehrerer Bildschirme


92

Da wir wissen, dass Android mit verschiedenen Geräten mit unterschiedlichen Funktionen, Auflösungen und Bildschirmgrößen geliefert wird, gibt es bei der Entwicklung einer Anwendung, die mehrere (kleine und große) Bildschirme unterstützt, ein Hindernis für Größe und Layout.

Dies führt zu unterschiedlichen Kombinationen von Bildschirmgrößen, Auflösungen und DPIs und stellt eine ziemliche Herausforderung beim Entwerfen und Entwickeln für Android-Geräte dar. Während einige andere Hersteller (nicht Android) unterschiedliche Auflösungen und DPI haben, haben sie dieselbe Bildschirmgröße und die Auflösungen folgen demselben Seitenverhältnis. Daher kann ein Bild erstellt werden, das auf Geräte ohne Android passt.

Meine Frage ist, ob es einen richtigen Ablauf oder eine Architektur gibt, der man folgen sollte, um die Anforderung zu erfüllen.

Geben Sie hier die Bildbeschreibung ein

Denken Sie daran, dass wir Tablets mit unterschiedlicher Größe und Auflösung haben.

Mir ist bekannt, dass Android Developer diese Informationen enthält, aber meine Ansicht stammt von der Implementierung.

Nach meinem Wissen habe ich verstanden, dass zum Programmieren von Android-Grafiken sogar Programmierer das Designkonzept kennen müssen.


13
Sind Sie sicher, dass diese Frage nicht konstruktiv ist?
Mohammed Azharuddin Shaikh

6
Ich finde es sehr konstruktiv. Möchte die Gründe für die Abstimmungen wissen.
Lazy Ninja

11
@MKJParekh take MicroMax Funbook gsmarena.com/micromax_funbook_p300-4701.php Kannst 7", 480X800, Ldpi (133 dpi) du mir sagen, in welche Kategorie (Drawble-Large oder Ldpi oder wenn Android v3.0 sw-480) es fallen wird?
Mohammed Azharuddin Shaikh

1
@LazyNinja der Grund für Abstimmungen sind Wahnsinnige und Verrückte. Wer glaubt nur, konstruktive Fragen stellen zu können: p
AZ_

1
@AZ_ :) Wir haben diese res-Struktur im res-Ordner verwendet. Drawable drawable-hdpi drawable-hdpi-v11 drawable-hdpi-v9 drawable-large drawable-large-hdpi drawable-ldpi drawable-mdpi drawable-mdpi-v11 drawable-small drawable- xhdpi drawable-xhdpi-v11 drawable-xxhdpi drawable-xxhdpi-v11 layout layout-small layout-sw530dp layout-sw720dp layout-xlarge values ​​values-sw530dp values-sw720dp values-v14 values-xlarge und verwendete genau definierte Dimensionen in xml from values ​​Ordner . FYKI Unsere Anwendung unterstützt mehr als 5.000 Gerätetypen.
MKJParekh

Antworten:


147

Schließlich wurde eine Struktur erstellt, die Layouts und Symbole für mehrere Bildschirme verarbeitet.

Android verallgemeinert Geräteanzeigen anhand von zwei Parametern in Kategorien:

  • Bildschirmgröße, die physische Größe des Displays (diagonal gemessen)
  • Bildschirmdichte, die physikalische Pixeldichte der Anzeige (in Pixel pro Zoll oder ppi) "

Um die Bildschirmgröße und -dichte schnell zu bestimmen, installieren Sie bitte die App " What's my Size " für Android.

Bildschirmgröße

Android definiert vier allgemeine Bildschirmgrößen:


 Qualifier           Size

 small               ~3 inches (approx) 
 normal              ~4 inches (approx) 
 large               Exceeds 4 inches    
 xlarge              Exceeds 7 inches  
  • Die meisten Telefone werden als klein oder normal eingestuft (ungefähr 3 bis 4 Zoll diagonal). Aber jetzt gibt es viele Telefone mit großem Bildschirm wie Galaxy S4, HTC One, Xperia Z.
  • Ein kleines Tablet wie das Samsung Galaxy Tab wird als groß eingestuft (größer als 4 Zoll).
  • Extra groß gilt für große Geräte, z. B. große Tablets

Android definiert vier allgemeine Bildschirmdichten:


 Qualifier         Description         Nominal value

 ldpi              low density          120 ppi
 mdpi              medium density       160 ppi
 hdpi              high density         240 ppi
 xhdpi             extra high density   320 ppi

Typischerweise:

  • Die Bildschirmgröße hat den größten Einfluss auf Ihre App-Layouts
  • Die Bildschirmdichte hat den größten Einfluss auf Ihre Bild- und Grafikressourcen

Es wird aufgeführt hier die prozentuale Differenz des Gerätebildschirm

  • Ldpi- 75%
  • Mdpi- 100% (Basis laut Android-Entwicklerseite)
  • Hdpi- 150%
  • XHdpi- 200%

Geben Sie hier die Bildbeschreibung ein

Aber da wir jetzt wissen, dass die meisten Geräte mit 480X800 geliefert werden , betrachte ich dies als basiertes Gerät, daher wird unsere neue Berechnung dies mögen

  • Ldpi- 50%
  • Mdpi- 66,67%
  • Hdpi- 100%
  • XHdpi- 133,33%

Dies bedeutet, dass das erste Symbol und Design zuerst für 480X800 und dann für die übrigen (dh Ldpi, Mdpi, Xhdpi) erstellt werden.

Es gibt Bilder, die für alle Layouts gleich sind und in Farbe und Form einheitlich sein müssen (keine komplexe Form, keine Kurve). Für diese Art von Bild erstellen wir sie, 9patchdie in den Ordner „Zeichenbar (ohne Suffix)“ gelegt werden sollen. Um ein 9Patch-Bild zu erstellen, können Sie entweder DrawNinePatch oder BetterNinePatch verwenden

Benennen Sie Ihre Bilder jetzt einfach nach den Standards von Android um und vervollständigen Sie Ihre Anwendung mit hdpiund nehmen Sie dann den drawable-hdpiOrdner und öffnen Sie Adode Photoshop (empfohlen). Erstellen Sie eine Aktion mit mehreren Größen (ändern Sie einfach die Größe entsprechend dem prozentualen Verhältnis), sobald die Aktion für alle Größen erstellt wurde, und führen Sie sie dann aus Batch Automatisieren und geben Sie Quelle (drawable-hdpi) und Ziel (drawable-ldpi, drawable-mdpi, drawable-xdpi) an.

Der Grund, warum ich darauf bestehe, dass Sie Photoshop verwenden, da die Größe Ihres Bildes automatisch mit Aktionen geändert wird und ein weiterer Pluspunkt darin besteht, dass Sie die Datei nicht umbenennen müssen (sie weist denselben Namen wie die ursprüngliche zu).

Wenn Sie alle Bilder erstellt haben, aktualisieren Sie Ihr Projekt und testen Sie es.

Manchmal besteht die Möglichkeit, dass das Layout, das den Bildschirm (xhdpi, hdpi, mdpi) unterstützt, in einen kleinen Bildschirm (ldpi) geschnitten wird. Um dies zu handhaben, erstellen Sie einfach einen separaten Layoutordner (layout-small) und fügen Sie ihn hinzu ScrollView(meistens). Das ist es.

Tablet Tablets werden in zwei Größen eingeteilt.

  1. 7 "(1024X (600-48 (Navigationsleiste))) = 1024X552 (ziehbar groß)
  2. 10 "(1280X (800-48 (Navigationsleiste))) = 1280X752 (zeichnbar-groß)

In diesem Fall müssen wir ein Bild für beide Bildschirme erstellen und sie einfach entsprechend platzieren

Alles in allem haben wir diesen Ordner in unserer Anwendung, um mehrere Bildschirme zu unterstützen.

drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-large
drawable-xlarge

wird mehr Qualifikation Kombination mit Screen size and Screen density

drawable-large-ldpi
drawable-large-mdpi
drawable-large-hdpi
drawable-large-xhdpi

mehr Qualifikation mit Screen density and Version

drawable-ldpi-v11
drawable-mdpi-v11
drawable-hdpi-v11
drawable-xhdpi-v11

und mehr Qualifikation mit Screen size and Version

drawable-large-v11
drawable-xlarge-v11

und mehr Qualifikation mit Smallest width concept(SW)

 drawable-sw???dp

Darüber hinaus haben sie in Android V3.0 Honeycomb ein neues Konzept eingeführt, SW(smallest width)bei dem Geräte nach Bildschirmbreite kategorisiert werden. Wenn wir also einen Ordner mit dem Namen erstellen, verwendet drawable-sw360dpdas Gerät mit 720 dp (entweder Breite oder Höhe) Ressourcen aus diesem Ordner.

zum Beispiel den finden Samsung Galaxy S3 dp zu Suffix ziehbar-sw? dp
Mit Bezug von DP Berechnung , Wenn Sie Ihr Layout oder ziehbar bis S3 unterstützen wollen , dann sagt die Berechnung

px = Gerätebreite = 720
dpi = Gerätedichte = 320

Formel angegeben

    px = dp * (dpi / 160)

Formel austauschen, weil wir den Wert von px haben

    dp = px / (dpi / 160)

jetzt Wert setzen,

     dp= 720 / (320/160);
     dp=360. 

so drawable-sw360dpwird der Job machen

Wenn Sie die Gerätekonfiguration von GsmArena Sameway erhalten, können Sie auch einen Ordner gemäß der Android-API-Version des Geräts erstellen, dh drawable-hdpi-v11`, sodass das Gerät mit API11 und Hdpi diese Ressourcen verwendet.

Zusätzliche Tipps:

  • Verwenden Sie relative Layouts, dp, sp und mm

    dp-Einheiten - Geräteunabhängige Pixel, normalisiert auf 1 physikalisches Pixel auf einem Bildschirm mit 160 ppi, dh mittlerer Dichte. Zur Laufzeit skaliert. Verwendung für Bildschirmelementabmessungen

    sp-Einheiten - skalierte Pixel, angegeben als Gleitkommawerte, basierend auf dp-Einheiten, aber zusätzlich skaliert für die Einstellung der Schriftgröße des Benutzers. Zur Laufzeit skaliert. Für Schriftgrößen verwenden

    Sie sollten RelativeLayout immer für Layouts verwenden. AbsoluteLayout ist veraltet und sollte nicht verwendet werden.

  • Verwenden Sie geeignete Bildformate - PNG versus JPEG

    Android "prefers" PNG for bitmap image files, "accepts" JPEG, and "discourages" GIF.

    PNG und JPEG sind jedoch keine Äquivalente. Sie haben unterschiedliche Qualitätskompromisse, und PNG ist nicht immer das Beste:

    JPEG kann die Dateigröße um bis zu 50% gegenüber PNG reduzieren. Dies ist von Bedeutung, wenn Ihre App bildintensiv ist

    Ein "verlustbehaftetes" JPEG höherer Qualität sieht bei gleicher Dateigröße möglicherweise besser aus als ein stark komprimiertes "verlustfreies" PNG

  • Fügen Sie Ihren Bildern und Grafiken Beschriftungen zum Debuggen hinzu

  • Verwenden Sie das Support-Screens-Element

  • Konfigurieren Sie Ihre Emulatoren mit realen Gerätewerten

    Herkömmlicherweise werden Desktop-Systeme mit 72 ppi (Mac) oder 96 ppi (Windows, Linux) angezeigt. Im Vergleich zu Mobilgeräten weisen Desktop-Displays immer eine geringe Dichte auf.

    Konfigurieren Sie Ihre Android-Emulatoren immer so, dass sie reale Gerätewerte imitieren, und stellen Sie sie immer so ein, dass sie skaliert werden, um die Gerätedichte zu emulieren.

    In Eclipse können Sie ganz einfach mehrere Emulatoren erstellen (wählen Sie in der Eclipse-Menüleiste Fenster> AVD-Manager> Neu ), die mit Werten für reale Geräte konfiguriert sind:

    Benennen Sie den Emulator für das reale Gerät, das emuliert wird. Geben Sie die Auflösung an. Verwenden Sie keine integrierten generischen Größen. Stellen Sie die Gerätedichte so ein, dass sie mit dem realen Gerät übereinstimmt.

    Wenn Sie das Gerät starten, wählen Sie immer Anzeige auf echte Größe skalieren und geben Sie die tatsächliche Bildschirmgröße in Zoll ein.

    Wenn Sie die Gerätedichte nicht festlegen, verwendet der Emulator standardmäßig eine niedrige Dichte und lädt immer ldpi-spezifische Ressourcen. Die Auflösung (Pixelabmessungen) ist korrekt, aber Ihre dichteabhängigen Bildressourcen werden nicht wie beabsichtigt angezeigt.

    Natürlich wird nichts, was Sie tun, eine Bildqualität mit höherer Dichte auf einem Desktop-Display mit niedrigerer Dichte reproduzieren.

Hier sind die Daten aufgeführt, die während eines Zeitraums von 7 Tagen bis zum 1. Oktober 2012 gesammelt wurden. Die neueste Statistik zur Android-Plattformversion finden Sie hier

Basierend auf der Bildschirmgröße

Geben Sie hier die Bildbeschreibung ein

Basierend auf der Bildschirmdichte

Geben Sie hier die Bildbeschreibung ein


2
Für Samsung Galaxy Tab 7 "müssen wir Bilder unter Drawable-Large-HDPI halten, sonst wird das Bild gedehnt oder verkleinert.
Rajpara

@rajpara gibt es viele Kombinationen und Permutationen, wir werden alle diese Fälle später einschließen.
Mohammed Azharuddin Shaikh

1
siehe @AlexBonel, ja, ich stimme Ihnen zu, aber mein Hauptmotto ist es, sich darüber im Klaren zu sein, wie Dinge getan werden können, wenn es um die Unterstützung mehrerer Bildschirme geht. Man kann diesen Fluss / dieses Konzept modifizieren / manipulieren, weil das Obige dazu dient, das anfängliche Problem zu verdeutlichen. Zusätzlich mache ich auch Modifikationen basierend auf dem Anwendungsdesign. Ihr Beitrag gibt mir das Gefühl, dass Sie das Konzept verstanden haben. Hoffe du hast meinen Standpunkt verstanden.
Mohammed Azharuddin Shaikh

1
Gute Antwort. Nachdem ich viel und so viele Tage gesucht hatte, warum diese Ausnahmen auftraten, bekam ich diesen Beitrag als beste Antwort mit großartigem Beispiel und Erklärung. Betrachten Sie beispielsweise das Halo Value 7-Zoll-Tablet. PPI = 133. Auflösung = 480 * 800. Größe = 7 'Zoll. Wenn wir mdpi als Basis betrachten, sollte es die in values-sw480 definierte Dimension annehmen, aber die Dimension von values-sw600. Ich habe nicht verstanden, warum das passiert. Wirklich vielen Dank für Ihren Beitrag. Sparen Sie Zeit und beseitigen Sie die Verwirrung. Ich denke, das sollte auf der offiziellen Website von Android sein. Schätzen Sie Ihre Mühe.
Smeet

1
Ich denke, das ist die beste Antwort, die ich je gesehen habe. Ich suche seit langem nach einer solchen Antwort. Und schließlich habe ich es verstanden. Vielen Dank an alle, die zu dieser Antwort beigetragen haben, um sie verständlicher zu machen.
Hiren Dixit

1

Designer sollten Basisdesigns von erstellen

base size of mdpi devices * density conversion factor of highest supported density bucket
Größe. Die Basisbildschirmgröße beträgt 320 x 480 Pixel und die Dichtebereiche sind wie folgt:

  • ldpi: 0,75
  • mdpi: 1,0 (Basisdichte)
  • HDPI: 1,5
  • xhdpi: 2,0
  • xxhdpi: 3.0
  • xxxhdpi: 4.0

Um zusätzlichen verfügbaren Speicherplatz auf Android-Geräten zu nutzen, sollten dehnbare Komponenten in beide Richtungen (horizontal und vertikal) verwendet werden. Detaillierte Informationen finden Sie hier:

http://vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.