java为Android布局文件夹使用nnndpi
在使用Android像素特定布局多年后,我遇到了“nnndpi”限定符。我还没有能够专门针对三星Galaxy S8,将其与从sw360dp xxxhdpi文件夹中取出的其他设备区分开来。sw360dp xxxhdpi还以S7为目标,因此在xml文件中定义marginLeft时,这两个设备实际上会将某些屏幕元素显示为大约60dp关闭
我试图定义h740dp和h740dp xxxhdpi、568dpi、142dpi,以及我从这个伟大的设备规范资源中得到的一些其他变体:https://material.io/tools/devices
我还没能瞄准S8,我认为一定有办法瞄准这个特定的设备和市场上的任何其他设备(不管这是否是一个糟糕的设计实践)
# 1 楼答案
三星Galaxy S8屏幕的分辨率为360dp x 740dp,分辨率为xxxhdpi。可用于此屏幕的资源限定符包括:
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
表示横向