2010-04-15 13 views
9

Potrzebuję określić gęstość ekranu w czasie wykonywania w aplikacji Android AppWidget. Skonfigurowałem urządzenie emulujące HDPI (avd). Jeśli założyć regularny projekt wykonywalny i wstawić ten kod do metody onCreate:Jak mogę uzyskać prawidłowe DisplayMetrics z AppWidget w systemie Android?

DisplayMetrics dm = getResources().getDisplayMetrics(); 
Log.d("MyTag", "screen density " + dm.densityDpi); 

ten wyprowadza „gęstość ekranu 240” zgodnie z oczekiwaniami.

Jednakże jeśli założyć projekt AppWidget i odczytaniu kodu do metody onUpdate:

DisplayMetrics dm = context.getResources().getDisplayMetrics(); 
Log.d("MyTag", "screen density " + dm.densityDpi); 

Ten wynik „gęstość ekranu 160”. Zauważyłem, podpinając debuggera, że ​​element mDefaultDisplay obiektu Resources ma tutaj wartość NULL w przypadku AppWidget. Podobnie, jeśli otrzymam zasób w środowisku wykonawczym za pomocą obiektu Resources uzyskanego z context.getResources() w AppWidget, to zwrócony zostanie niewłaściwy zasób na podstawie gęstości ekranu. Na przykład mam rysowanie 60x60px dla mdpi i 80x80 dla hdpi. Jeśli otrzymam ten obiekt Drawable za pomocą context.getResources(). GetDrawable (...), zwraca on wersję 60x60.

Czy istnieje sposób prawidłowego radzenia sobie z zasobami w środowisku wykonawczym z kontekstu AppWidget?

Dzięki!

Odpowiedz

1

To wygląda jak błąd. Jeśli możesz utworzyć przykładowy projekt demonstrujący błąd, opublikuj problem na Android issue tracker. Jeśli myślisz o tym, dodaj tutaj komentarz wskazujący na problem.

+0

Hmmm. Stworzyłem prosty widget, który nie robi nic, tylko demonstruje ten błąd i poprawnie wyświetla 240 w emulatorze HDPI. Wrócę i spróbuję dowiedzieć się, co jest innego w moim innym widżecie. Dzięki za spojrzenie. – ManicBlowfish

+4

Aha. W moim manifeście brakowało mi tagu . Jeśli ustawię wersję min sdk na cokolwiek> = 4, otrzymam poprawne zagęszczenie ekranu w czasie wykonywania. – ManicBlowfish

Powiązane problemy