В процессе разработки приложения для 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"
/>
Но, увы, это тоже не сработало.Итак, кто-нибудь знает, как заставить телефон правильно вернуть его плотность?