2017-02-27 40 views
0

我知道一个观点基本上只包含两件事情,一个表示位置的x和y整数,但他们实际经过哪些单位?Android Point对象说明

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

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

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

回答

0

简答题(S)

什么单位?他们居然去了?

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

为什么当我的手机宽度比这个大一点时,它返回了720px。

填充,系统装饰,兼容性问题,窗口管理器问题。您也可以从一个不同的答案:。

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 display-size)模拟较小的显示器,则真实显示器 区域可能会小于显示器的物理大小。使用以下方法查询实际显示 区域:getRealSize(Point),getRealMetrics(DisplayMetrics)。

所以最有可能要使用

getRealSize(Point); 

要获得的空间量。至于你对Point单位的问题,我相信它实际上是像素。再次从the docos

空隙的getSize(点特大)

获取显示器的尺寸,以像素为单位。

+0

非常感谢您的闪电般的快速回复,并对我的慢速回复感到抱歉。你的回答给出了一个非常透彻和易于理解的答案! –