2010-12-05 7 views
28

Ich habe ein paar Nachforschungen über Gebäudemodelle angestellt, die für mehrere Bildschirmgrößen funktionieren, und ich bin auf der Suche nach Klärung.Wie machst du Layouts für mehrere Android Bildschirmgrößen?

Ist es üblich, nur eine separate Layoutdatei für jede der drei Bildschirmgrößen (klein, mittel, groß) zu erstellen, oder können Sie dies mit einer einfacheren Methode erreichen?

Ich habe meine Projekte auf einem großen Bildschirmgerät getestet, und obwohl ich DIPs (Dichte unabhängige Pixel) für Padding, Ränder usw. verwende, scrupft es immer noch, wenn ich es auf kleineren Bildschirmen betrachte. Soll ich meine Projekte für mittelgroße Bildschirme entwerfen und dann Android einfach skalieren lassen?

Ich bin mir nicht sicher, ob dies eine gute Frage ist oder nicht, aber ich bin auf der Suche nach der üblichen Praxis für das Design für mehrere Bildschirmgrößen. Wie geht's?

Bearbeiten: Darüber hinaus, zum Beispiel, sagen wir, ich habe eine Schaltfläche, die 40dip über dem unteren Rand des Bildschirms ist, sollte ich 40dip buchstäblich schreiben, oder sollte ich eine Art Pixelmathematik wie 40 * screenWidth verwenden/blahblah oder so, dass es je nach Bildschirmgröße des Benutzers skaliert? Ich habe begrenzte Erfahrung mit UIs ...

+0

Ja, Sie können dies in preety einfachen Weg erreichen, siehe meine Antwort http://stackoverflow.com/a/16518557/1939564 –

Antwort

14

Bei der Bildschirmgröße sind zwei Achsen zu berücksichtigen: physikalische Größe und Dichte. Die Dichte wird durch Bereitstellung von Messungen in Dips und skalierten Ressourcen entsprechend behandelt. Aber Dichte bedeutet nicht immer Größe oder umgekehrt. Weitere Informationen zur Mechanik finden Sie unter http://developer.android.com/guide/practices/screens_support.html.

Es ist nicht üblich oder empfohlen, verschiedene Layouts auf jedem Bildschirm Auflösung Sie unterstützen, aber es ist völlig in Ordnung, verschiedene Layouts für verschiedene Größenklassen (klein, mittel, groß) zu entwerfen. Bei unterschiedlich großen Bildschirmen können je nach App bestimmte Navigationselemente hinzugefügt, entfernt oder neu positioniert werden.

Innerhalb einer bestimmten Größenklasse sollten Sie sicherstellen, dass Ihre Layouts Abweichungen in der genauen Bildschirmauflösung tolerieren. Wie von Falmarri vorgeschlagen, verwenden Sie relative Layouts, Gewichtungen und die anderen verfügbaren Tools, um Ihr Layout elegant zu gestalten.

+0

Okay, das ist, wo ich verwirrt war. Mir ist aufgefallen, dass ich beim Betrachten meiner App auf einer normal großen Emulatorinstanz den unteren Zoll des Inhalts verloren habe. Alles wurde richtig skaliert und positioniert. Also dann sollte ich ein separates Layout für die verschiedenen Bildschirmgrößen verwenden, nicht Dichten, richtig? – joepetrakovich

+0

Das ist ein Weg, es zu tun. Aber wenn Sie den unteren Zoll des Inhalts Ihres Layouts verlieren, würde ich vermuten, dass alles nicht richtig skaliert und positioniert wird. ;) Es gibt viele verschiedene Geräte mit unterschiedlichen Auflösungen und Dichten, die alle die Bildschirmgröße "normal" anzeigen. Ein einzelnes Layout sollte damit umgehen können. – adamp

+0

Sollte ich meine App als Basisgröße von normal entwerfen und sie dann zu groß skalieren? Seit dem mache ich das Gegenteil. – joepetrakovich

1

Keine separaten Layouts machen ist nicht wirklich gängige Praxis. Nur wenn Sie Bilder haben, die nicht gedehnt werden können, ist das wirklich der empfohlene Weg.

Bei Geräten mit kleineren/größeren Bildschirmen sieht es immer etwas gestreckt/komprimiert aus. Das ist irgendwie die Definition eines Bildschirms mit einer anderen Größe. Sie sollten nur relative Layouts verwenden und Android die spezifischen Pixelzahlen steuern lassen.

+0

Ich habe verschiedene Layouts für jeden, aber immer noch nicht funktioniert. http://stackoverflow.com/questions/343778238/landscape-mode-for-app –

+0

Diese Frage ist 5 Jahre alt. Frage einen neuen. – Falmarri

+0

Ähm, ich weiß. Deshalb habe ich meine ** neue ** Frage für Sie verknüpft ... –

3

Die allgemeine Regel ist die Verwendung von dichteunabhängigen Pixeln (Dips) für Größendefinitionen in Ihrem Layout xmls - ich sehe, Sie tun es schon. Dadurch habe ich nur das einzige Layout für alle Geräte. Was gespalten werden muss, ist Grafik. Dafür benutze ich 3 verschiedene ziehbare Verzeichnisse - 'drawable-ldpi', 'drawable-mdpi' und 'drawable-hdpi'. Dies geschieht, um Bilder getan, um die gleiche Größe haben (sagen wir mal, in Millimeter) auf verschiedenen Bildschirmdichten (unter der Annahme, Bildschirmgröße ist die gleiche - Normal, zum Beispiel) sie skaliert werden sollen, wie folgt:

  • drawable- hdpi: 150%
  • ziehbar-MDPI: 100%
  • ziehbar-LDPI: 75%

Wahrscheinlich ist es ein schlechter Rat. Wenn Sie sich jedoch die Google chart of Screen Sizes and Densities ansehen, können Sie sich entschließen, Ihre zusätzlichen Bemühungen nicht in gründliche Tests für große Bildschirme zu investieren, da es fast keine solchen Geräte auf dem Markt gibt.

+0

Ich unterstütze auch Falmarri - verwenden Sie relative Layouts. Ansichten sollten nur den übergeordneten Inhalt ausfüllen oder Inhalt umbrechen. Wahrscheinlich verwenden Sie nur Konstanten für die Textgröße und die Abstände/Ränder. –

+0

Wenn Sie "skaliert" meinen, meinen Sie etwas wie: Öffnen Sie Photoshop, laden Sie das Bild und gehen Sie zu Datei> Bild skalieren (oder so ähnlich) und reduzieren Sie es um einen bestimmten Prozentsatz? – joepetrakovich

+0

@PetrakovichJ: Ja, ich meine, die Bilder sollten in einem Bildbearbeitungsprogramm skaliert werden, bevor sie in diese Verzeichnisse eingefügt werden. –