Supporting Multiple Screens

programm2008

programm2008

Ambitioniertes Mitglied
0
6o9nsg7mseb.png


Hallo Leute habe auf der developer seite von Android diese Tabelle gefunden. Ich möchte meine App weiter optimieren, da sie auf älteren Geräten abstürzt. Es gibt ja verschiedene drawable ordner. Wenn ich z.B ein kleines Bild in den mdpi ordner packe funktioniert es zwar super auf kleinen Geräten aber auf WXGA Geräten ist die größe dann kleiner als es sein soll?!? WTF? Kann mir einer erklären wie ich das Problem löse? mdpi reicht ja von (320x480) bis (1280x800)...
 
Hi,
Einfach viele vers Bilder auf in vers. Grössen in vers. Ordner unterbringen.

Und mdpi reicht eigentlich nicht von (320x480) bis (1280x800). Das sehe ich zum ersten Mal. Normalerweise ist das Bildschirmformat WVGA800 hdpi.
Kann sein das ich falsch liege, aber wenn es so wirklich wäre dann wäre das wirklich schlecht. Muss aber noch dazu sagen, dass ich kein Gerät kenne, dass eine Hohe Auflösung hat aber geringe Bildschirmdichte.

Auf jeden Fall wenn du einen Emu vom Android SDK mit der Auflösung 480x800 startest wird es ja automatisch auf hdpi angelegt.

Mich würde mal interssieren auf welchem Gerät stürzt deine App ab..?
Und wieso stürzt sie überhaupt ab, eigentlich sollten deine Bilder da schlecht aussehen oder nicht..?
 
  • Danke
Reaktionen: programm2008
Ich habe das bisher so gehandhabt dass ich die bilder mit der Auflösung: 550x325 (activity besteht aus landscape modus mit viewflipper) in den default drawable ordner gepackt habe. Auf meinem Handy Galaxy S2 und auch auf "moderneren" Handy läuft alles ganz sauber. Bei Handys mit schlechter Hardware z.B ZTE-Blade stürzt die Activity ab und gibt mir einen "OutOfMemoryError". Hab mich schon erkundigt und soll daran liegen, dass die Bilder zu groß sind für das Handy...
 
Ach so, also weiss du garnicht wie deine Activity bei diesen GEräten ausieht..?

Mal ne Frage lädst du deine Bilder per Bitmap-Objekt..?

Denn dein "OutOfMemoryError" errinert mich sehr an das bekannte Problem von Android mit grossen Bitmap-Files, siehe hier..: Loading Large Bitmaps Efficiently | Android Developers
Da gibt es auch Lösungsvorschläge von Google.
 
Wie meinst du das mit aussehen?

Ähhmm die Bilder sind in der XML Datei definiert, da es sich um einen Viewflipper handelt..Was könnte ich denn da machen..muss ich die Auflösung minimieren und dann z.b mit den niedrigeren Auflösungen in z.B in den ldpi ordner reinpacken oder noch iwas am code ändern?

<ViewFlipper
android:id="@+id/viewflipper"
android:layout_width="fill_parent"
android:layout_height="188dp"
android:layout_weight="0.44" >



<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent" >


<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/bild1" />
</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent" >

<ImageView
android:id="@+id/imageView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/bild2" />
</LinearLayout>

usw...

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ViewFlipper;

public class Lernspiel extends Activity {

private static final int info = Menu.FIRST;
private static final int mehrapps = Menu.FIRST + 1;
AlertDialog.Builder builder;
AlertDialog alertDialog;
ViewFlipper flippy;


@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.flipper);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

flippy = (ViewFlipper) findViewById(R.id.viewflipper);

}


public void weiter (View view){
System.gc();
Runtime.getRuntime().gc();
flippy.showNext();
 
Ich meine, da deine app davor abstürzt, weiss du ja nicht wie deine Activity bei diesen genannnte geräten aussieht.

Ja du könntest niedrigere Auflöung und im ldpi Ordner reintun, wenn du es noch nicht probiert hast.
Ich frage mich grad ob deine App bei ldpi handys und kleinem bildschirm also handys mit 240x320 funktioniert, ich meine die Bilder wären doch viel zu gross oder nicht (wenn du ja keine neue kleinere anlegst)..?
 
Aso ja kann ich leider nicht sehen.

Hab schon probiert allerdings mit einem Android Emulator. Allerdings ist beim Emulator das Problem, dass es sogar mit den Einstellungen 240x320 funktioniert ich muss die VM größe noch anpassen.
 
Ich kenne den ViewFlipper zwar nicht, aber ich hatte auch mal Probleme mit dem OutOfMemoryError als ich das Gerät gekippt habe. Beim Kippen muss das Gerät ja alle Daten speichern (in den ram, vermute ich mal) und in der anderen Orientierung wieder herstellen. Wenn der ram aber voll läuft, durch große Grafiken zum Beispiel, stürzt das Gerät ab. Vielleicht ist das mit ViewFlipper ja so ähnlich. Zumindest kannst du ja beim Emulator den ram hochdrehen.

Wenn ich z.B ein kleines Bild in den mdpi ordner packe funktioniert es zwar super auf kleinen Geräten aber auf WXGA Geräten ist die größe dann kleiner als es sein soll?!? WTF?

Was für ein Ergebnis hast du erwartet? Mal angenommen, zwei unterschiedlich große Geräte haben 160dpi (mdpi) , dann wird eine Grafik in den physikalischen Abmessungen auf beiden Geräten exakt gleich aussehen (also in cm zum Beispiel). Nur hat das große Gerät eben mehr Pixel zur Verfügung.
Ich denke mal, du willst, dass dein Bild im Verhältnis zum Bildschirm immer gleich aussieht, richtig? Dann muss du die Grafik skalieren.

Und mdpi reicht eigentlich nicht von (320x480) bis (1280x800). Das sehe ich zum ersten Mal. Normalerweise ist das Bildschirmformat WVGA800 hdpi.

Soweit ich weiß, sind mit diesen Begriffen nur die Auflösungen gemeint, nicht aber die Pixeldichte (Sieht man auch in der Tabelle, WVGA800 taucht in drei unterschiedlichen Dichten auf).

Und noch ein Tipp: Du kannst deine drawable-Ordnder auch folgendermaßen kennzeichnen: drawable-large-mdpi usw. Jede Kombination ist möglich. Auch mehrere layout-Ordner sind möglich (layout-large, layout-small usw.) Dann musst dort du jeweils Grafiken verschiedener Größen und andere Layouts zur Verfügung stellen.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: programm2008
Wie mache ich das mit dem Skalieren?
 
Wie mache ich das mit dem Skalieren?

Das mit dem Skalieren ist eine recht komplizierte Sache (wie ich finde). Weil du ja ein ImageView verwendest, solltest du dir dessen Attribut "android:scaleType" anschauen. Der Wert "fill" füllt zum Beispiel die ganze ihm zur Verfügung stehende Breite und Höhe aus und skaliert dabei die Grafik. Wenn du das richtig mit Layouts kombinierst (z.B. LinearLayout mit Proportionen), könntest du schon hinbekommen, was du möchtest. Natürlich kannst du auch im Code skalieren, aber das ist wiede eine Sache für sich.
 

Ähnliche Themen

C
Antworten
1
Aufrufe
1.974
blackdesire1412
B
D
Antworten
11
Aufrufe
1.189
markus.tullius
markus.tullius
S
Antworten
3
Aufrufe
978
Jaiel
Jaiel
Zurück
Oben Unten