我正在Samsung Galaxy Tab A 10.1(2019)上测试我的应用程序(调试版本)。设备分辨率为1200 x1920。但是,当我使用getDisplayWidth()和getDisplayHeight()时,我得到900 x 1359(= 1440-状态栏)。因此,该应用程序以较低的分辨率运行,实际上图形看起来有点粗糙。但是,当我制作屏幕截图时,它的分辨率为1200 x1920。GalaxyTab A无法更改屏幕分辨率,因此我找不到解决此问题的方法。
这是一个已知问题,有解决方案吗?
编辑:临时解决方案是更改(已知应用程序的)程序包名称。使用NativeLogsReader.cn1lib我们得到
1),带有原始包名称:
--------- beginning of main
05-17 13:09:35.879 24347 24347 D ViewRootImpl@34e19e6[MainStub]: Relayout returned:
old=[0,0][1200,1920] new=[0,0][900,1440] result=0x7 surface={true 3890690048} changed=true
2)包名称已更改:
--------- beginning of main
05-17 13:22:46.459 26231 26231 D ViewRootImpl@34e19e6[MainStub]: Relayout returned:
old=[0,0][1200,1920] new=[0,0][1200,1920] result=0x7 surface={true 3890690048} changed=true
因此,对于原始程序包名称,分辨率为reduced,对于更改的程序包名称,分辨率保持原始。我在这个问题上进行了搜索,没有找到其他示例或线索。
如果设备测试仪正常工作,我猜想负载分辨率是一种虚假的兼容性(很多设备都这样做),然后发送屏幕尺寸更改事件以对此进行更新。您可以在表单中添加屏幕大小事件监听器,以监视大小更改事件,或者在需要时仅动态调用getDisplayWidth()
。
通常,最佳做法是在此处进行防御性编程,并且如果显示宽度与上一次使用的显示宽度不同,则使用代码来动态重新创建元素。