2017-05-07 2 views
0

ich die Brache ziehbar genannt haben background.xmlAndroid - ziehbar verschwindet, wenn nicht in der richtigen Auflösung

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape> 
     <gradient 
      android:angle="90" 
      android:startColor="@color/gradient_bottom" 
      android:endColor="@color/gradient_top" 
      android:type="linear" /> 
    </shape> 
</item> 
</selector> 

, wenn die XML unter dem ziehbar Ordner ist, in einigen Fällen reproduzierbar (nicht sicher, warum, hat wahrscheinlich etwas zu mit hohem Speicherverbrauch) verschwindet der Hintergrund.

Allerdings, wenn ich das Szenario neu und ich habe die gleiche xml in allen ziehbar Auflösung Ordnern, wird der Hintergrund nicht verschwinden (dh ziehbar-hdpi, ziehbar-xhdpi etc.)

Diese Art der Sache soll nicht passieren, kann jemand erklären, warum es passiert und wie man es eleganter beheben kann?

PS -

  1. , wenn ich dieses Problem eine Farbe als Hintergrund setze nicht passieren

  2. das Problem ist, tritt auch für einen Hintergrund benutzerdefinierten Schaltfläche, und fixiert, wenn ich das setzen benutzerdefinierter Hintergrund in den aufklappbaren Auflösungsordnern

Antwort

1

Ich empfehle, Ressourcenverzeichnisse mit den dpi-Qualifiern zu verwenden, wie möglich. Andernfalls können Sie mit einigen Geräten OutOfMemory-Fehler erhalten. Erläuterung hier:

standardmäßig Android skaliert Bitmap Drawables (.png, .jpg und GIF-Dateien) und Nine-Patch-Drawables (.9.png Dateien), so dass sie an der entsprechenden physikalischen Größe machen auf jedem Gerät. Wenn Ihre Anwendung z. B. Bitmap-Zeichen nur für die Grundlinie mittlere Bildschirmdichte (mdpi) bereitstellt, skaliert das System sie auf einem Bildschirm mit hoher Dichte und skaliert sie auf einem Bildschirm mit niedriger Dichte. Diese Skalierung kann Artefakte in den Bitmaps verursachen. Um sicherzustellen, dass Ihre Bitmaps optimal aussehen, sollten Sie alternative Versionen mit unterschiedlichen Auflösungen für unterschiedliche Bildschirmdichten hinzufügen.


Zur Laufzeit gewährleistet das System die bestmögliche Anzeige auf dem aktuellen Bildschirm mit dem folgende Verfahren für eine gegebene Ressource:

Das System verwendet die entsprechende alternative Ressource Basierend auf Bei der Größe und Dichte des aktuellen Bildschirms verwendet das System jede für die Größe und Dichte spezifische Ressource, die in Ihrer Anwendung bereitgestellt wird. Wenn das Gerät beispielsweise über einen Bildschirm mit hoher Bildschirmdichte verfügt und die Anwendung eine ausklappbare Ressource anfordert, sucht das System nach einem ausklappbaren Ressourcenverzeichnis, das der Gerätekonfiguration am besten entspricht. Abhängig von den anderen verfügbaren alternativen Ressourcen kann ein Ressourcenverzeichnis mit dem hdpi-Qualifizierer (z. B. drawable-hdpi /) die beste Übereinstimmung sein, sodass das System die auslösbare Ressource aus diesem Verzeichnis verwendet. Wenn keine passende Ressource verfügbar ist, verwendet das System die Standardressource und skaliert sie nach Bedarf nach oben oder unten, um der aktuellen Bildschirmgröße und -dichte zu entsprechen Die "Standard" -Ressourcen sind Ressourcen, die nicht mit einem Konfigurationsqualifikationsmerkmal gekennzeichnet sind. Zum Beispiel sind die Ressourcen in drawable/die standardmäßig ziehbaren Ressourcen. Das System geht davon aus, dass Standardressourcen für die Basisbildschirmgröße und -dichte ausgelegt sind, bei der es sich um eine normale Bildschirmgröße und eine mittlere Dichte handelt.Daher skaliert das System Standarddichte-Ressourcen für Bildschirme mit hoher Dichte und für Bildschirme mit niedriger Dichte nach Bedarf herunter. Wenn das System jedoch nach einer dichtespezifischen Ressource sucht und diese nicht im dichtespezifischen Verzeichnis findet, werden nicht immer die Standardressourcen verwendet. Das System kann stattdessen eine der anderen dichte-spezifischen Ressourcen verwenden, um bessere Ergebnisse beim Skalieren bereitzustellen. Wenn beispielsweise nach einer Ressource mit niedriger Dichte gesucht wird und diese nicht verfügbar ist, zieht das System es vor, die Version mit hoher Dichte der Ressource zu verkleinern, da das System eine Ressource mit hoher Dichte problemlos auf eine niedrige Dichte skalieren kann ein Faktor von 0,5 mit weniger Artefakten verglichen mit dem Skalieren einer Ressource mit mittlerer Dichte um einen Faktor von 0,75.

Source

+0

Warum aber der Hintergrund funktioniert in der Regel? Das XML, das ich in die Verzeichnisse mit den dpi-Qualifizierern gelegt habe, ist dasselbe wie das Original. Wenn das System den ziehbaren Standardordner annimmt, ist es derselbe, aber es scheint, dass er dort nicht gefunden werden kann oder so ähnlich. – BennyP

+0

@BennyP Es hängt von der Auflösung der Geräte- und Ressourcendatei ab. Wenn das System die Ressource aus dem standardmäßigen ausklappbaren Ordner bezieht, wird es jedes Mal auf den Bildschirm skaliert. Skalierungsprozess verwendet Speicher. Wenn der Skalierungsprozess zu viel Arbeitsspeicher verwendet, kann dies zu Fehlern oder Leistungsproblemen führen. Beispielsweise kann die Verwendung eines Hintergrundbilds (standardmäßiger, aufklappbarer Ordner) mit dem Galaxy S3 funktionieren, jedoch auf dem Galaxy S4 abstürzen. Ich habe vor ungefähr 4-5 Jahren mit einem ähnlichen Problem konfrontiert. –

+0

Verstanden und akzeptiert – BennyP