Android Point对象澄清

时间:2017-02-27 03:12:49

标签: java android android-layout

我知道一点基本上只包含两个东西,一个代表位置的x和y整数,但它们实际上是通过什么单位?

我假设像素只是因为当我使用显示对象获取默认手机屏幕的大小并将其存储在点对象(display.getSize(point))并记录我的点对象时,我得到了(720, 1184)

它不能是dps或类似的东西,因为只有像素可以那么大。但是,当我尝试将720px作为随机UI元素的宽度进行测试时,它比填充整个手机宽度缩短了大约40个像素。我也没有参加这项活动。所以我想知道为什么当我的手机宽度比这个大一点时它返回720px。

如果我确实有填充,display.getSize()会考虑到这一点吗?

1 个答案:

答案 0 :(得分:0)

简答

  

他们实际去哪些单位?

Point可以表示不同的东西但是在display.getSize()之后调用它是像素。

  

当我的手机宽度略大于此时,为什么它会返回720px。

填充,系统装饰,兼容性问题,Window Manager问题。您还可以从以下网址获得不同的答案:

getApplicationContext().getSystemService(Context.WINDOW_SERVICE).getDefaultDisplay().getSize(point)

getWindowManager()。getSystemService(Context.WINDOW_SERVICE).getDefaultDisplay()。的getSize()

如果应用程序/设备在多窗口模式下运行,也可以实现这一点。

  

如果我确实有填充,display.getSize()会考虑到这个吗?

更长的答案:根据API docos

  

应用程序显示区域指定可能的显示部分   包含一个应用程序窗口,不包括系统装饰。应用程序显示区域可以小于实际显示区域,因为系统减去诸如状态栏之类的装饰元素所需的空间。使用以下方法查询应用程序显示区域:getSize(Point),getRectSize(Rect)和getMetrics(DisplayMetrics)。

     

实际显示区域指定包含的显示部分   内容包括系统装饰。即便如此,真正的显示   如果是,则区域可能小于显示器的物理尺寸   窗口管理器使用(adb shell am)模拟较小的显示   显示屏尺寸)。使用以下方法查询实际显示   area:getRealSize(Point),getRealMetrics(DisplayMetrics)。

所以你很可能想要使用

getRealSize(Point);

获得足够的空间。至于你关于Point单位的问题,我相信它实际上是像素。再次来自the docos

  

void getSize(Point outSize)

     

获取显示的大小(以像素为单位)。