Мне нужно определить плотность экрана во время выполнения в 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?
Спасибо!
Хммм. Я создал простой виджет, чтобы ничего не делать, но продемонстрировал эту ошибку, и он корректно отображает 240 в эмуляторе HDPI. Я вернусь и попытаюсь понять, что отличает мой другой виджет. Спасибо, что посмотрели. – ManicBlowfish
Ага. Мне не хватало тега в моем манифесте. Если я установил версию min sdk на что-нибудь> = 4, я получаю правильную плотность экрана во время выполнения. –
ManicBlowfish