Android: показывает неправильное разрешение экрана - PullRequest
11 голосов
/ 22 февраля 2011

Я пытался получить разрешение экрана телефонов 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 получил разрешение экрана 480х800 пикселей.Так что не так с кодом ??

Как я могу получить фактическое разрешение экрана конкретного устройства ??

Ответы [ 6 ]

21 голосов
/ 24 февраля 2011

Наконец, после 2 дней поиска и тестирования, мне, наконец, удалось выяснить, в чем тут проблема .. Все вышеперечисленное кодирование даст правильное разрешение.Но самое важное это то, что нам нужно упомянуть целевой SDK в файле манифеста. В противном случае он даст неверный результат, если плотность больше 1.

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="8" />

необходимо установить версию targetSDK изчто-нибудь между 4-9 ... Надеюсь, это поможет кому-нибудь в будущем столкнуться с той же проблемой.

4 голосов
/ 22 февраля 2011

Попробуйте использовать это:

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;
1 голос
/ 21 декабря 2013

Отключите предварительное масштабирование, добавив эту строку в файл манифеста:

<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" >
...

После этого ваш дисплей больше не будет масштабироваться, и вы также получите правильное разрешение экрана.

0 голосов
/ 11 ноября 2013

Вот как я это сделал:

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
0 голосов
/ 22 февраля 2011

Это, кажется, работает .. хотя я не знаю, правильный ли это метод ..

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

density=dm.densityDpi; 
width=(density/160)*dm.widthPixels; 
height=(density/160)*dm.heightPixels;
0 голосов
/ 22 февраля 2011

попробуйте это ..

 Display display = getWindowManager().getDefaultDisplay();
int ScreenHeight = display.getHeight();
int ScreenWidth = display.getWidth();
...