2013-06-17 8 views
5

Gibt es eine Möglichkeit, genau zu wissen, welches Layout (und andere Ressourcen) von Android während Laufzeit basierend auf Bildschirm Dichte und Größe wann gewählt werden mehrere Bildschirme unterstützen?Einfachste Art zu wissen (programmatisch), welche Ressourcen Ordner verwendet wird basierend auf Bildschirm Dichte/Größe

Ich muss den Namen des Ordners wissen.

EDIT:

Ich brauche den Ordnernamen kennen programmatisch.

+0

Von Code oder einfach nur die Geräte- und Projektstruktur betrachten und sich fragen: Woher hat dieses Gerät ein solches Layout/Zeichensatz bekommen? –

+0

Ja, tut mir leid. Ich verfeinere meine Frage. –

+0

Ich denke, das könnte am besten geeignet sein, Ordner Name zu bekommen: http://StackOverflow.com/A/19155853/490683 – Larphoid

Antwort

15

Wenn Sie dies nur zu Debugging-Zwecken tun, würde ich Folgendes empfehlen: Für jedes Qualifikationsmerkmal, für das Sie ein Layout/Zeichen haben, haben Sie einen Werteordner mit demselben Qualifikationsmerkmal (zB wenn Sie ein Layout-hdpi, haben auch eine Werte-hdpi zu entsprechen). Fügen Sie einen strings.xml für jeden dieser Ordner und definieren einen String:

In values-hdpi:

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

In values-xhdpi:

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

Dann lösen Sie einfach die Zeichenfolge, wenn Sie es brauchen, und es wird Ihnen sagen, welcher Ordner ausgewählt wurde.

+0

die Eier von columbus ... danke –

0

Das Layout wird basierend auf Ihrer Programmierung ausgewählt. Gleiches gilt für das Menü und die Werte. Die Fotos basieren auf der Definition: HDPI = High Definition, LDPI = Low Definition usw.

+0

Ja sicher, verfeinere ich meine Frage. –

4

Stellen Sie eine Struktur wie dieses:

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 

und Sie wissen wollen, welches Layout verwendet wird.

Eine Möglichkeit wäre, einen Wert in Ressourcen zu setzen:

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> 

In Code, den Sie tun

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

Ich habe einige Zweifel an -Xdpi Qualifier, aber es sollte funktionieren (nicht getestet). Beachten Sie, dass Sie mit der oben genannten Struktur auf ldpi-Geräten für image.png "drawable-hdpi" erhalten.

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

nette Lösung :) thx – 5er

+0

Diese Lösung funktioniert nicht immer. Auf meinem Nexus 5X ist das zurückgegebene dichteDpi 420, was zwischen DENSITY_XHIGH und DENSITY_XXHIGH liegt. Ich würde die von @kcoppock zur Verfügung gestellte Lösung empfehlen –

Verwandte Themen