Android屏幕尺寸错误

时间:2013-06-02 21:34:00

标签: android android-screen

我正在使用此代码来获取屏幕分辨率:

//View v
Context ctx = v.getContext();
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

但我的屏幕尺寸错误:

06-03 05:25:47.861: I/Screen Size(5267): 1024x552

我的平板电脑有一个分辨率为1024x600的7英寸屏幕。我猜测系统栏使用的是48个像素,但即使隐藏它,我也会得到屏幕尺寸。

由于我在Android 4.1.1上,我不能使用API​​17中添加的getRealSize()方法。 如何获得正确的屏幕尺寸?

更新:我的面板密度与1.0没有差别,因此不是问题重复。大小应该是正确的。

Update2:以下代码有效(仅适用于13到16之间的API)。 它返回600x1024,因此只需检查屏幕方向以获得正确的宽度/高度

Method mGetRawW = Display.class.getMethod("getRawWidth");
Method mGetRawH = Display.class.getMethod("getRawHeight");
int nW = (Integer)mGetRawW.invoke(dp);
int nH = (Integer)mGetRawH.invoke(dp);

我从这里开始:Android DisplayMetrics returns incorrect screen size in pixels on ICS

2 个答案:

答案 0 :(得分:0)

您可以获得此类显示指标

context.getResources().getDisplayMetrics().density;

对于不同的人而不是densiy

这是一种方法,您可以在视图中覆盖以获取屏幕设备信息,每个设备运行一次

 @Override
public void onSizeChanged (int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
screenW = w;
screenH = h;

scaledCardW = (int) (screenW/8); //or whatever scale you need for    bitmaps
scaledCardH = (int) (scaledCardW*1.28);
bitmap = // load your bitmaps

}

答案 1 :(得分:0)

你不能,但由于系统栏总是在屏幕的底部,你可以使用这个技巧来获得真正的尺寸:

Display display = getWindowManager().getDefaultDisplay();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
int height = display.getWidth();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
int width = display.getWidth();