Android: отображение неправильного разрешения экрана
Я пытался получить разрешение экрана телефонов Android, используя этот код
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
str_ScreenSize = dm.widthPixels + " x " + dm.heightPixels;
str_ScreenSize = "dd" + " x " + dm.heightPixels;
Когда я пробовал этот код в своем телефоне Galaxy S, я получил разрешение экрана 320x533 px, но на самом деле Galaxy S получил разрешение экрана 480x800 px. Так что же не так с кодом?
Как я могу получить фактическое разрешение экрана для определенного устройства?
Ответы
Ответ 1
Наконец, после двух дней поиска и тестирования, я наконец-то выяснил, в чем тут проблема.
Все указанные выше кодировки дадут правильное разрешение. Но самое главное, что нам нужно указать целевой SDK в файле манифеста. В противном случае это даст неправильный результат, если плотность больше 1.
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="8" />
нужно установить версию targetSDK из чего-либо между 4-9..
Надеюсь, это поможет кому-то в будущем решить ту же проблему.
Ответ 2
Попробуйте использовать это:
width = getResources().getDisplayMetrics().widthPixels;
height = getResources().getDisplayMetrics().heightPixels;
Похоже, вы получаете пиксель после деления плотности (1.5) Galaxy S.
480 / 1.5 = 320
799.5 / 1.5 = 533
Edit:
density = getResources().getDisplayMetrics().density;
Ответ 3
Отключите предварительное масштабирование, добавив эту строку в файл манифеста:
<supports-screens android:anyDensity="true" />
Позиция
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="...."
android:versionCode="1"
android:versionName="1.0">
<supports-screens android:anyDensity="true" />
<application android:label="@string/app_name" >
...
После этого ваш экран больше не будет масштабироваться, и вы также получите правильное разрешение дисплея.
Ответ 4
попробуйте это.
Display display = getWindowManager().getDefaultDisplay();
int ScreenHeight = display.getHeight();
int ScreenWidth = display.getWidth();
Ответ 5
Кажется, что это работает. Хотя я не знаю, правильно ли он...
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
density=dm.densityDpi;
width=(density/160)*dm.widthPixels;
height=(density/160)*dm.heightPixels;
Ответ 6
Вот как я это сделал:
Display dis = getWindowManager().getDefaultDisplay();
Point point= new Point();
dis.getSize(point);
int width = point.x;
int height = point.y;
Если нет в действии:
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
До того, как был введен getSize (в уровне API 13), вы можете использовать методы getWidth и getHeight, которые теперь устарели:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated