首页 文章

Android屏幕尺寸错误[重复]

提问于
浏览
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上,我不能使用API17中添加的 getRealSize() 方法 . 如何获得正确的屏幕尺寸?

Update: 我的面板密度与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

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

    Display display = getWindowManager().getDefaultDisplay();
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    int height = display.getWidth();
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    int width = display.getWidth();
    
  • 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
    
    }
    

相关问题