Zeichnbare Bilder für verschiedene Bildschirmgrößen und -dichten auf Android-Geräten wiederverwenden

8

Kontext: Ich entwickle eine Android-Anwendung für Tablets (Landschaft) mit Bildressourcen, die eine Auflösung von 1920x1200 hat. Diese Auflösung passt auf die folgenden Bildschirmgrößen und -dichten:

%Vor%

Problem: Wenn ich alle meine Bildressourcen in diese beiden Ordner dupliziere, wird die endgültige Größe des APK unnötig schwer sein

Mein erfolgloser Ansatz: Ich habe versucht, Alias ​​für diese Zeichen wie hier definiert zu verwenden: Ссылка

Ich habe meine Bildquelle in:

%Vor%

und die zwei Alias ​​innerhalb der entsprechenden Bildschirmgrößen und Dichte Ordner:

%Vor%

image.xml:

%Vor%

Wenn ich mein Bild in einer Layoutdatei verwende, referenziere ich natürlich den Alias:

%Vor%

Aber leider ändert Android die Ressource für mein Testtablett (mdpi) nicht richtig und das Ergebnis ist, dass ich größere Bilder habe.

Ich habe versucht, die ursprünglichen PNGs zu res / drawable zu verschieben, sogar zu res / rohe , aber das Ergebnis ist dasselbe wie res / drawable-nodpi .

Wenn ich diese PNGs auf res / drawable-xlarge-hdpi (gleiches von xml alias) verschiebe, ist das Ergebnis korrekt, aber natürlich löst das mein Problem nicht, weil ich es auch kopieren müsste res / drawable-large-xhdpi und apk-Größe erhöht sich.

Weiß jemand, wie man das erreicht?

    
jbc25 09.08.2014, 15:34
quelle

6 Antworten

3

Ich versuche, wrap_content in ImageViews zu vermeiden, da die Größe der Bilder auf den verschiedenen Plattformversionen unterschiedlich ist. Wenn Sie eine explizite Breite und Höhe in dp eingeben, spielt es keine Rolle, welches Bild ausgewählt wird.

In Ihrem Fall hätte ich ein einzelnes Bild in drawable / xhdpi. Geben Sie die Breite und Höhe in der Layoutdatei in dp an. Für ein 1920x1200px Bild wäre das Layout_width="960dp" layout_height="600dp"

Das Bild hat ungefähr die gleiche physische Größe auf x-großen Tablets wie große Tablets.

Wenn Sie möchten, dass das Bild auf X-Large-Tablets größer wird, fügen Sie eine zweite Layoutdatei hinzu, in der die Breite und Höhe der Bilder erhöht werden, aber dieselben Bilder beibehalten werden.

Alternativ können Sie Dimensionsressourcen verwenden, die sich zwischen Groß und Groß X unterscheiden.

    
Jared Kells 13.08.2014, 03:52
quelle
3

Ich kann zwei Lösungen für dieses Problem vorschlagen:

Erster:

  1. Legen Sie alle Ihre Bilder in den Ordner "Assets". Teilen Sie sie nach Auflösungen in Ordner.
  2. Schreiben Sie Ihre eigene Logik, um die aktuelle Auflösung und / oder Größe des Geräts zu bestimmen.
  3. Wählen Sie das Bild aus dem Ordner mit der festgelegten Auflösung aus.
  4. Setze es auf deinen ImageView im Code.

Zweite (es ist hässlich, aber sehr schnell):

Komprimieren Sie einfach Ihre PNG-Bilder mit tinypng.com . Es kann Ihre Bilder um 70-80% verbessern, ohne die Qualität zu beeinträchtigen (für mobile Geräte).

    
Alon Zilberman 19.08.2014 15:19
quelle
2

Wie wäre es damit:

  1. setze deine gesamte Bildquelle in res/drawable-nodpi
  2. verschiedene Layoutdateien in res/layout-xlarge , res/layout-large , res/layout einfügen
  3. Wenn Sie dieses Bild auf ImageView verwenden, verwenden Sie nicht match_parent oder wrap_content , sondern verwenden Sie stattdessen die berechnete Größe in dp.

Das sollte funktionieren, aber der Nachteil ist, dass es nicht Vorskalierung , was bedeutet, dass bei niedrigeren dpi-Geräten mehr Speicher belegt wird.

    
bladefury 13.08.2014 03:55
quelle
1

Wenn Sie die gleichen Bilder für alle Geräte verwenden möchten, müssen Sie 9-Patch Images verwenden.

Hier finden Sie den offiziellen Artikel von Android hier klicken

Vorher:

Nachher: ​​

Verweisen Sie hier: Anleitung zum Herunterladen von Android 9-Patches

Ich hoffe, es hilft.

    
Mehul Patel 13.08.2014 03:04
quelle
1

Wenn Sie das gleiche Bild für alle Geräte verwenden möchten, dann sollten Sie 9 Patch Image verwenden, wobei jedes Layout ein Gewicht-Tag im linearen Layout in Android enthält. Ich denke, es ist Arbeit 100%. Ich bin mir sicher. weil ich diese Methode für universelle Anwendung verwende (bedeutet Tablet und Geräteanwendung)

    
Ramkailash 18.08.2014 04:11
quelle
1

Okay, ich habe dein Problem.Ich habe mein Wort zu diesem Problem

Es gibt zwei Wege und ich empfehle beide.

Erster Weg (bequemer im Zusammenhang mit Ihrem aktuellen Problem.)

Laden Sie mehrere APKs hoch, wenn die Größe größer wird.

Folgen Sie dem offiziellen Leitfaden .

Zweiter Weg Ich bevorzuge es, diesen Weg zu gehen.

Erstellen Sie mehrere Layouts. wie unten

res / Layout /main_activity.xml --- & gt; # Für Mobilteile (kleiner als 600dp verfügbare Breite)

res / layout-sw600dp /main_activity.xml - & gt; # Für 7 "-Tablets (600 dpi breit und größer)

res / layout-sw720dp /main_activity.xml # Für 10 "-Tablets (720 dpi breit und größer)

Ich empfehle dringend, jedes Wort von dieses offizielle Dokument von Google zu lesen.

Danke.

    
Imtiyaz Khalani 19.08.2014 14:15
quelle