2012-05-19 8 views
7

Verstehe ich das richtig:Wenn eine zeichnende Ressource für ldpi, mdpi, hdpi, xhdpi bereitgestellt wird, muss dieses Zeichen nicht für nodpi bereitgestellt werden?

Alle Android-Geräte fallen in eine dieser 4 Dichte Eimer: LDPI, MDPI, HDPI, XHDpi.

Wenn also für jede Dragee eine auszeichnungsfähige Ressource für Dichten bereitgestellt wird (in jedem dieser Ordner ist ein Zeichensatz oder ein Name mit demselben Namen vorhanden), ist es nicht erforderlich, einen Zeichensatz mit demselben Namen in/res anzugeben/Drawable oder/res/drawable-nodpi.

Ist meine richtige Zuordnung richtig?

Also, der einzige Grund, warum es sinnvoll ist, dieselbe Ressource in/res/drawable bereitzustellen, wäre, die App zukunftssicherer zu machen, falls ein neuer Dichte-Bucket für Android OS definiert wird?

Antwort

24

Ist meine richtige Zuordnung richtig?

Durch diesen Absatz sind Sie mehr oder weniger korrekt. Sie gehen ein wenig "von der Schiene" mit Ihrem nächsten Absatz:

Also, der einzige Grund, warum es sinnvoll ist, dass die gleiche Ressource in/res/Drawable wäre, um die App mehr Zukunft zu machen- Beweis, falls ein neuer Dichte-Bucket für Android OS definiert ist?

Nicht wirklich.

Sie setzen Ressourcen in res/drawable/, die an sich skalierbar sind (z. B. ShapeDrawable). Sie setzen Ressourcen in res/drawable-nodpi/, die aus irgendeinem Grund nicht skaliert werden sollen, um der Gerätedichte zu entsprechen.

Wenn Android einen neuen Dichte-Bucket (z. B. -uhdpi für eine ultrahohe Dichte von 400 dpi) erfindet, wird Android wahrscheinlich das tun, was Sie heute tun, wenn Sie einen Dichte-Bucket überspringen: Skalieren Sie eine Ihrer anderen Editionen. Wenn Sie beispielsweise -xhdpi haben und -hdpi nicht haben, wird Android das -xhdpi-Image für die Verwendung auf einem -hdpi-Gerät down-sample.

+0

Schöne Erklärung über nodpi Konzept. –

0

Wenn Ihre Ressource für alle vier Dichten hinzugefügt wird, dann stimmen Sie nicht haben, um das Zeichen in den Ordner /res/drawable hinzuzufügen. Sie haben jedoch richtig geraten, dass es am besten ist, in dem Fall, in dem ein neues Qualifikationsmerkmal angezeigt wird, etwas im Standardordner zu haben. Daher empfehle ich, mdpi-Ressourcen nicht in den Ordner /res/drawable-mdpi zu legen, sondern stattdessen in den Standardordner (/res/drawable/). Es ist eine gute Praxis für jede Art von Ressource.

Wie für die /res/drawable-nodpi Ordner, ist es ein spezieller Ordner, weil es Ressourcen enthalten soll, die nicht automatisch im Gegensatz zu allen anderen Qualifier skalieren. Daher verwenden Sie normalerweise entweder den Ordner /res/drawable-nodpi oder verwenden ihn überhaupt nicht.

+0

Warum also der Downvote? Was ist falsch in der Antwort? – Malcolm

5

Dies ist korrekt, solange Sie in allen 4 Dichte-Buckets Zeichensätze haben, die abgedeckt sind. Eine gängige Praxis ist es, ein benutzerdefiniertes Zeichen in/res/drawbar zu erstellen, das sich auf die Dichte bezieht, die sich über Zeichenblätter erstreckt.

Zum Beispiel möchten Sie vielleicht eine Schaltfläche mit verschiedenen Zuständen für gedrückt und nicht gedrückt. Zuerst würden Sie für jede gedrückte und nicht gedrückte Taste eine Zeichnung für jede Dichte hinzufügen.Dann könnten Sie die folgende button_black_selector.xml in/res/drawables erstellen:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="false" 
     android:drawable="@drawable/button_black"/> 

    <item android:state_pressed="true" 
     android:drawable="@drawable/button_black_selected" /> 

</selector> 
+0

Interessanter und eleganter Ansatz, tx, David Z – mrd

Verwandte Themen