经过多年使用特定于像素的 Android 布局,我遇到了“nnndpi”限定符。我无法专门针对三星 Galaxy S8 将其与从 sw360dp-xxxhdpi 文件夹中提取的其他设备分开。sw360dp-xxxhdpi 也针对 S7,因此当在 xml 文件中定义 marginLeft 时,这两个设备实际上将某些屏幕元素显示为大约 60dp。我试图定义 h740dp 和 h740dp-xxxhdpi、568dpi、142dpi,以及我从这个很棒的设备规范资源中想到的其他一些变体:https ://material.io/tools/devices我一直无法针对 S8,并认为必须有一种方法可以针对此特定设备和市场上的任何其他设备(无论这是否是一种糟糕的设计实践)。
1 回答

MYYA
TA贡献1868条经验 获得超4个赞
三星 Galaxy S8 屏幕在 xxxhdpi 时为 360dp x 740dp。您可以用来定位此屏幕的资源限定符是:
sw360dp
(最小宽度)- S8 将始终与此匹配w360dp
(可用宽度)- 无论方向如何,S8 都将匹配此值(因为横向宽度将超过 360dp)h740dp
(可用高度)- S8 将在纵向上与此匹配(尽管不完全;见下文)xxxhdpi
(像素密度)- S8 将始终与此匹配
h740dp
限定符的问题在于“可用宽度/高度”限定符没有为您提供物理屏幕尺寸;他们减去像状态栏和导航栏这样的持久用户界面。状态栏通常为 24dp,导航栏更大(通常为 48dp 或更多),但这两者都不能保证(如果您使用fitsSystemWindows
或以其他方式隐藏这些栏,则可以获得不同的结果)。
最重要的是,您根据屏幕尺寸所做的任何“定位”都将始终有可能定位到其他设备,因为没有什么能阻止 LG 制造具有至少 360x740dp 的 xxxhdpi 屏幕的手机。
总之,这意味着你不应该做你正在做的事情。但是如果你必须这样做,那么我会尝试这组限定符:layout-sw360dp-h668dp-xxxhdpi
纵向(你可以尝试使用确切的数字hXXXdp
来说明状态和导航栏)和layout-sw360dp-w740dp-xxxhdpi
横向。
添加回答
举报
0/150
提交
取消