Android display.getWidth / height возвращает неправильные размеры для устройства?

1

У меня есть небольшой класс, который должен отслеживать ширину и высоту устройств.

public class BrScreenMetrics {
public static int screenX=0;
public static int screenY=0;

public static void setMetrics(Activity activity)
{ 

    WindowManager w = activity.getWindowManager();
    Display d = w.getDefaultDisplay(); 
    screenX = d.getWidth(); 
    screenY = d.getHeight(); 


}

}

С каждым новым действием я вывожу строку:

BrScreenMetrics.setMetrics(this);

который обновляет значения при вращении и т.д. Это отлично работает, за исключением того, что он возвращает 320x522, а не мое желание 480x800. Что я делаю неправильно?

Небольшое обновление:

Я попробовал это с помощью этого кода, используя андроиды собственного класса метрик:

    public static void setMetrics(Activity activity)
{ 
   DisplayMetrics metrics = new DisplayMetrics();
   activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);      
   screenX = metrics.widthPixels;
   screenY = metrics.heightPixels;

}

но это все равно 320x522: (

Теги:

2 ответа

3
Лучший ответ

Спасибо, что посмотрел манифест, действительно был правильным, я узнал, в конце концов, мне нужно было с минимальным требованием 4-6.

Вот моя утилита, если кто-нибудь найдет ее полезной или может предложить способы сделать ее лучше:

package se.brickit.foundation;
//Open comment block above for info.

import android.app.Activity;
import android.view.Display;
import android.view.WindowManager;
import android.webkit.WebSettings.ZoomDensity;

public class BrScreenMetrics {
    private static int screenWidthPX = 0;
    private static int screenHeightPX = 0;
    private static int densityDpi = 0;
    private static DisplayMetrics metrics;

    public static void setMetrics(Activity activity) {
        DisplayMetrics metrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
        screenWidthPX = metrics.widthPixels;
        screenHeightPX = metrics.heightPixels;
        densityDpi = metrics.densityDpi;

    }

    /**
     * @return the screenWidthPX
     */
    public static int getScreenWidthPX() {
        return screenWidthPX;
    }

    /**
     * @param screenWidthPX
     *            the screenWidthPX to set
     */
    public static void setScreenWidthPX(int screenWidthPX) {
        BrScreenMetrics.screenWidthPX = screenWidthPX;
    }

    /**
     * @return the screenHeightPX
     */
    public static int getScreenHeightPX() {
        return screenHeightPX;
    }

    /**
     * @param screenHeightPX
     *            the screenHeightPX to set
     */
    public static void setScreenHeightPX(int screenHeightPX) {
        BrScreenMetrics.screenHeightPX = screenHeightPX;
    }

    /**
     * @return the densityDpi
     */
    public static int getDensityDpi() {
        return densityDpi;
    }

    /**
     * @param densityDpi
     *            the densityDpi to set
     */
    public static void setDensityDpi(int densityDpi) {
        BrScreenMetrics.densityDpi = densityDpi;
    }

    /**
     * @return the metrics
     */
    public static DisplayMetrics getMetrics() {
        return metrics;
    }

    /**
     * @return the density
     */
    public static ZoomDensity getZoomDensity() {
        if (densityDpi < 140)
            return ZoomDensity.CLOSE;
        if (densityDpi < 210)
            return ZoomDensity.MEDIUM;
        return ZoomDensity.FAR;
    }

    public static int getStatusBarHeight() {
        ZoomDensity zd = getZoomDensity();

        if (zd == ZoomDensity.CLOSE)
            return 19;
        else if (zd == ZoomDensity.MEDIUM)
            return 25;
        else 
            return 38;

    }

}
0

вы получаете правильные размеры экрана с помощью dp,  если вы хотите получить реальные размеры в пикселях, добавьте это в свой AndroidManifest.xml

<supported-screens android:anyDensity="true" />

Примечание: это возможно только на Android 1.6 sdk или выше

Надеюсь, что это поможет:)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню