1

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

//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

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

由于我使用的是 android 4.1.1,因此我无法使用getRealSize()API17 中添加的方法。如何获得正确的屏幕尺寸?

更新:我的面板的密度与 1.0 没有什么不同,所以它不是问题重复。尺寸应该是正确的。

更新 2:以下代码有效(仅适用于 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 在 ICS 上返回不正确的屏幕尺寸(以像素为单位)

4

2 回答 2

0

您可以获得这样的显示指标

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

对于不同于密度的不同

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

 @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

}
于 2013-06-02T21:41:12.340 回答
0

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

Display display = getWindowManager().getDefaultDisplay();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
int height = display.getWidth();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
int width = display.getWidth();
于 2013-06-02T21:45:04.313 回答