Android-Ressource wurde wegen Breite und Höhe nicht gefunden

7

Ich habe kürzlich eine Android-App im Laden veröffentlicht, die für fast alle meine Nutzer perfekt funktionierte. Jedoch habe ich kurz ein paar Absturzberichte pro Woche mit folgendem Trace bekommen:

%Vor%

Es ist nicht einfach zu bestimmen, was genau hier vor sich geht. Das einzige, was ich aus den Benutzerberichten entnehmen konnte, war, dass es hauptsächlich auf Geräten mit Displays mit geringer Dichte vorkam. Diese spezifische Ressource wird als Hintergrund für eine Ansicht in einer XML-Benutzerschnittstelle verwendet.

    
Overv 15.03.2013, 09:11
quelle

1 Antwort

22

Das Problem wird hier durch eine unglückliche Kombination aus der automatischen Skalierung von ausklappbaren Ressourcen in Android und sehr kleinen Zeichen verursacht.

Wenn Ihre App beispielsweise nur drawable-xhpdi Ressourcen zur Verfügung stellt, müssen sie verkleinert werden, damit sie auf Bildschirme niedrigerer Bildschirmdichte passen. Dies wird automatisch von Android durchgeführt, wenn Sie diese Ressourcen nicht selbst bereitstellen.

Die Skalierung der Anzeigedichte wird wie folgt eingestellt:

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0
  • ldpi: 0,75

Dies bedeutet, dass Ihre xhdpi Ressourcen auf Displays mit mittlerer Dichte um einen Faktor von 2,0 herunterskaliert werden. Dies kann sich nachteilig auf die Qualität auswirken, weshalb in der Regel empfohlen wird, diese Ressourcen mit geringerer Dichte selbst zu erstellen und bereitzustellen.

Nun zurück zu dem Problem. Es ist nicht ganz ungewöhnlich, eine Ressource mit einer sehr kleinen Breite oder Höhe (1 oder 2 Pixel) zu haben. Ein Beispiel für einen Anwendungsfall ist die Bereitstellung eines einfarbigen Hintergrunds für eine Ansicht.

Wenn diese Ressourcen als xhdpi bereitgestellt und skaliert werden, kann die Pixelgröße leider auf 0 reduziert werden. Es gibt keinen Schutz dafür und Android kann keine Bitmap mit dieser Dimension und diesem Absturz erstellen.

Dafür gibt es mehrere Lösungen:

  • Fügen Sie die Ressource als ldpi ein und lassen Sie sie stattdessen vergrößern, was sich nicht auf den Zweck als Hintergrund auswirkt.
  • Fügen Sie die Ressource als nodpi ein und sie wird nie skaliert.
  • Verwenden Sie stattdessen eine XML-Ressource.

Die letzte Option beschreibt die Absicht am genauesten und ermöglicht Ihnen, die Farbe später ohne ein Bildbearbeitungsprogramm leicht zu ändern:

%Vor%

Fügen Sie diese Ressource in den Ordner drawables ein und sie wird immer ordnungsgemäß funktionieren.

    
Overv 15.03.2013, 09:11
quelle