2013-06-17 4 views
5

C'è un modo per sapere esattamente quale layout (e altre risorse) sono scelti da Android durante il runtime in base alla densità e alle dimensioni dello schermo quando supportare più schermi?Il modo più semplice per sapere (a livello di codice) quale cartella delle risorse viene utilizzata in base alla densità/dimensione dello schermo

Ho bisogno di sapere il nome della cartella.

EDIT:

ho bisogno di sapere il nome della cartella programmazione.

+0

Da codice o solo guardando il dispositivo e la struttura del progetto e chiedendo a te stesso: da dove è stato ricavato/disegnato questo dispositivo? –

+0

Sì, mi dispiace. Affinamento la mia domanda. –

+0

Penso che questo potrebbe essere il modo migliore per ottenere il nome della cartella: http://stackoverflow.com/a/19155853/490683 – Larphoid

risposta

15

Se si esegue questa operazione a scopo di debug, si consiglia di fare qualcosa di simile: per ogni qualificatore per cui si dispone di un layout/disegnabile, avere una cartella valori con lo stesso qualificatore (ad es. Se si dispone di layout-hdpi, ha anche un valore-hdpi da abbinare). Aggiungi uno strings.xml per ciascuna di queste cartelle, e definire una stringa:

In values-hdpi:

<string name="folder_name">hdpi</string> 

In values-xhdpi:

<string name="folder_name">xhdpi</string> 

Poi basta risolvere la stringa quando ne avete bisogno, e ti dirà quale cartella è stata selezionata.

+0

le uova di Colombo ... grazie –

0

Il layout viene scelto in base alla modalità di programmazione. Lo stesso con il menu e i valori. Le foto sono basate sulla definizione: HDPI = Alta definizione, LDPI = Bassa definizione ect.

+0

Sì certo, perfeziono la mia domanda. –

4

Immaginate di avere una struttura come questa:

res/ 
    drawable-mdpi/image.png 
    drawable-hdpi/image.png 
    drawable-xhdpi/image.png 
    layout/main.xml 
    layout-land/main.xml 
    layout-xlarge/main.xml 
    layout-sw600dp/main.xml 

e volete sapere, che il layout utilizzato.

Un modo potrebbe essere quello di mettere un valore in termini di risorse:

res/ 
    values-mdpi/strange_info.xml with: 
     <string name="image_is_from_folder">drawable-mdpi</string> 
    values-hdpi/strange_info.xml with: 
     <string name="image_is_from_folder">drawable-hdpi</string> 
    values-xhdpi/strange_info.xml with: 
     <string name="image_is_from_folder">drawable-xhdpi</string> 

    values/strange_info.xml with: 
     <string name="main_is_from_folder">layout</string> 
    values-land/strange_info.xml with: 
     <string name="main_is_from_folder">layout-land</string> 
    values-xlarge/strange_info.xml with: 
     <string name="main_is_from_folder">layout-xlarge</string> 
    values-sw600dp/strange_info.xml with: 
     <string name="main_is_from_folder">layout-sw600dp</string> 

Nel codice appena fai

String mainFolderName = context.getResources().getString(R.string.main_is_from_folder); 

Ho alcuni dubbi per quanto riguarda qualificazione -Xdpi, ma dovrebbe funzionare (non testato). Si noti che con la struttura sopra si otterrà "drawable-hdpi" sui dispositivi ldpi per image.png.

6
DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
switch(metrics.densityDpi){ 
       case DisplayMetrics.DENSITY_LOW: 
        break; 
       case DisplayMetrics.DENSITY_MEDIUM: 
        break; 
       case DisplayMetrics.DENSITY_HIGH: 
        break; 
       case DisplayMetrics.DENSITY_XHIGH: 
        break; 
       case DisplayMetrics.DENSITY_XXHIGH: 
        break; 
       case DisplayMetrics.DENSITY_XXXHIGH: 
        break; 
      } 
+0

bella soluzione :) thx – 5er

+0

Questa soluzione non funziona sempre. Sul mio Nexus 5X il densityDpi restituito è 420, che si trova tra DENSITY_XHIGH e DENSITY_XXHIGH. Consiglierei la soluzione fornita da @kcoppock –

Problemi correlati