У меня есть небольшой класс, который должен отслеживать ширину и высоту устройств.
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: (
Спасибо, что посмотрел манифест, действительно был правильным, я узнал, в конце концов, мне нужно было с минимальным требованием 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;
}
}
вы получаете правильные размеры экрана с помощью dp, если вы хотите получить реальные размеры в пикселях, добавьте это в свой AndroidManifest.xml
<supported-screens android:anyDensity="true" />
Примечание: это возможно только на Android 1.6 sdk или выше
Надеюсь, что это поможет:)