有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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表示横向