2010-04-15 2 views
9

Мне нужно определить плотность экрана во время выполнения в Android AppWidget. Я настроил эмулятор HDPI (avd). Если установить регулярный исполняемый проект, и вставить этот код в OnCreate метод:Как я могу получить правильные DisplayMetrics из AppWidget в Android?

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

Это выводит «плотность экрана 240», как ожидалось.

Однако, если я создал проект AppWidget, и вставить этот код в OnUpdate метод:

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

Это выводит «плотность экрана 160». Я заметил, подключая отладчик, что член mDefaultDisplay объекта Resources здесь имеет значение null в случае AppWidget.

Аналогично, если я получаю ресурс во время выполнения с использованием объекта Resources, полученного из context.getResources() в AppWidget, он возвращает неправильный ресурс на основе плотности экрана. Например, у меня есть 60x60px для mdpi и 80x80 для hdpi. Если я получаю этот объект Drawable с помощью context.getResources(). GetDrawable (...), он возвращает версию 60x60.

Есть ли способ правильно работать с ресурсами во время выполнения из контекста AppWidget?

Спасибо!

ответ

1

Это похоже на ошибку. Если вы можете создать образец проекта, демонстрирующий ошибку, отправьте сообщение об ошибке на Android issue tracker. Если вы думаете об этом, добавьте здесь комментарий, указывающий на проблему.

+0

Хммм. Я создал простой виджет, чтобы ничего не делать, но продемонстрировал эту ошибку, и он корректно отображает 240 в эмуляторе HDPI. Я вернусь и попытаюсь понять, что отличает мой другой виджет. Спасибо, что посмотрели. – ManicBlowfish

+4

Ага. Мне не хватало тега в моем манифесте. Если я установил версию min sdk на что-нибудь> = 4, я получаю правильную плотность экрана во время выполнения. – ManicBlowfish

Смежные вопросы