2012-05-19 6 views
7

faccio capito bene:Se una risorsa disegnabile è previsto ldpi, MDPI, hdpi, xhdpi, questo drawable non ha bisogno di previsto nodpi?

tutti i dispositivi Android cadono in uno di questi secchi 4 densità: ldpi, MDPI, hdpi, xhdpi.

Quindi, se una risorsa disegnabile è previsto per ciascuno di questi per densità (un disegnabile o con lo stesso nome esiste in ognuno di queste cartelle), allora non è necessario fornire una drawable con lo stesso nome in/res/drawable o/res/drawable-nodpi.

È il mio understanfing corretta?

Quindi, l'unica ragione, perché ha senso fornire la stessa risorsa in/res/drawable, rendere l'applicazione più a prova di futuro, nel caso in cui per il sistema operativo Android sia definito un nuovo bucket di densità?

risposta

24

È il mio understanfing corretta?

Attraverso questo paragrafo, sei più o meno corretto. Sei un po '"fuori dai binari" con il tuo prossimo paragrafo:

Quindi, l'unica ragione, perché ha senso fornire la stessa risorsa in/res/drawable sarebbe, per rendere l'app più futura- prova, nel caso in cui un nuovo bucket di densità sia definito per il sistema operativo Android?

Non proprio.

Si mettono le risorse in res/drawable/ che sono intrinsecamente scalabili (ad esempio, ShapeDrawable). Hai messo le risorse in res/drawable-nodpi/ che, per qualche motivo, non si vuole essere scalato in modo che corrisponda alla densità dispositivo.

Se Android inventa un nuovo bucket di densità (ad esempio, -uhdpi per una densità ultraelevata di 400 dpi), Android probabilmente farà ciò che fa oggi se salti un bucket di densità: scala una delle tue altre edizioni. Ad esempio, se si dispone di -xhdpi e non hanno -hdpi, Android sarà down-campionare l'immagine -xhdpi per l'utilizzo su un dispositivo -hdpi.

+0

Nice Spiegazione sul concetto di nodpi. –

0

Se la risorsa viene aggiunta per tutte e quattro le densità, significa che non è possibile aggiungere alla tabella /res/drawable. Tuttavia, hai indovinato correttamente che è meglio avere qualcosa nella cartella predefinita nel caso se appare un nuovo qualificatore. Pertanto, vi consiglio di mettere le risorse MDPI non alla cartella /res/drawable-mdpi, ma nella cartella predefinita invece (/res/drawable/). È una buona pratica per ogni tipo di risorsa.

Per quanto riguarda la cartella /res/drawable-nodpi, è una cartella speciale, poiché si suppone che contenga risorse che non vengono ridimensionate automaticamente diversamente da tutti gli altri qualificatori. Di conseguenza, di solito usi la cartella /res/drawable-nodpi da solo o non la usi affatto.

+0

Allora perché il downvote? Cosa non è corretto nella risposta? – Malcolm

5

Questo è corretto, purché siano presenti i drawable in tutti i 4 bucket di densità che sono coperti. Una pratica comune è quella di creare un drawable personalizzato in/res/drawable che faccia riferimento ai drawable della densità che si estende.

Ad esempio, è possibile che un pulsante con stati diversi venga premuto e non premuto. Innanzitutto, includi un drawable di ciascuna densità per un pulsante premuto e non premuto.Quindi è possibile creare il seguente button_black_selector.xml in/res/drawables:

<?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

Approccio interessante ed elegante, tx, David Z – mrd

Problemi correlati