Android: о плотности экрана не сообщается правильно - PullRequest
1 голос
/ 08 сентября 2011

В процессе разработки приложения для Android я заметил, что следующие строки кода не сообщают правильный размер экрана для моего Samsung Nexus S:

width = getResources().getDisplayMetrics().widthPixels;
height = getResources().getDisplayMetrics().heightPixels;

Ширина возвращалась как 320, а высотаустановлен на 533. Из этого поста Я знаю, что это проблема, связанная с тем, что плотность пикселей устройства не учитывается.Чтобы исправить это, я написал следующий код:

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm);

int density = dm.densityDpi; 
int width = (density / 160) * dm.widthPixels; 
int height = (density / 160) * dm.heightPixels;

Когда я ставлю тост за переменные width и height, возвращаемые измерения имеют ширину 320 и высоту 533, что означает, что ничего не изменилось.Кроме того, dm.densityDpi возвращает 160, а не 235, как это должно быть для Samsung Nexus S.

В некоторых постах, которые я прочитал, похоже, предполагается, что проблема может заключаться в AndroidManifest.xml.Я уже добавил следующее в свой XML-файл, пытаясь решить эту проблему:

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="10"
/>

<supports-screens 
    android:anyDensity="false"
    android:resizeable="false"
    android:largeScreens="true"
    android:normalScreens="true"
/>

Но, увы, это тоже не сработало.Итак, кто-нибудь знает, как заставить телефон правильно вернуть его плотность?

1 Ответ

3 голосов
/ 08 сентября 2011

Эта «проблема» не имеет никакого отношения к плотности, потому что ваше приложение работает в режиме совместимости. Ваш манифест должен сообщить anyDensity = true.

...