2013-06-17 7 views
5

Czy istnieje sposób, aby dowiedzieć się, który układ (i inne zasoby) są wybierane przez Androida podczas runtime na podstawie gęstości ekranu i rozmiaru, gdy obsługa wielu ekranów?Najprościej można poznać (programowo), który folder zasobów jest używany w oparciu o gęstość ekranu/rozmiar

Potrzebuję znać nazwę folderu.

EDIT:

muszę znać nazwę folderu programowo.

+0

Od kodu lub po prostu patrząc na urządzenie i strukturę projektu i zadając sobie pytanie: skąd to urządzenie otrzymało taki układ/podciągnięcie? –

+0

Tak, przepraszam. Udoskonalam moje pytanie. –

+0

Myślę, że to może być najlepiej nadaje się do uzyskania nazwy folderu: http://stackoverflow.com/a/19155853/490683 – Larphoid

Odpowiedz

15

Jeśli po prostu robisz to dla celów debugowania, polecam robienie czegoś takiego: dla każdego kwalifikatora, dla którego masz układ/losowanie, masz folder wartości z tym samym kwalifikatorem (np. Jeśli masz layout-hdpi, również mają wartości-hdpi do dopasowania). Dodaj strings.xml dla każdego z tych folderów i zdefiniować ciąg:

W values-hdpi:

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

W values-xhdpi:

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

Następnie wystarczy rozwiązać ciąg kiedy jej potrzebujesz, i powie ci, który folder został wybrany.

+0

jaja columbus ... dzięki –

0

Układ jest wybierany na podstawie sposobu jego zaprogramowania. To samo dotyczy menu i wartości. Zdjęcia są oparte na definicji: HDPI = Wysoka rozdzielczość, LDPI = Mała rozdzielczość.

+0

Tak, poprawię moje pytanie. –

4

Wyobraź sobie, że mają strukturę takiego:

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 

i chcesz wiedzieć, który układ jest stosowany.

Jednym ze sposobów byłoby umieścić wartość w zasobach:

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> 

W kodzie po prostu zrobić

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

mam pewne wątpliwości co -Xdpi eliminacjach, ale to powinno działać (nie testowane). Zauważ, że w powyższej strukturze otrzymasz "drawable-hdpi" na urządzeniach ldpi dla 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

ładne rozwiązanie :) thx – 5er

+0

To rozwiązanie nie działa zawsze. Na moim Nexusie 5X gęstośćDpi zwrócona wynosi 420, czyli między DENSITY_XHIGH a DENSITY_XXHIGH. Polecam rozwiązanie dostarczone przez @kcoppock –

Powiązane problemy