Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对Android布局文件夹使用nnndpi_Java_Android_Android Studio - Fatal编程技术网

Java 对Android布局文件夹使用nnndpi

Java 对Android布局文件夹使用nnndpi,java,android,android-studio,Java,Android,Android Studio,在使用Android像素特定布局多年后,我遇到了“nnndpi”限定符。我还没有能够专门针对三星Galaxy S8,将其与从sw360dp xxxhdpi文件夹中取出的其他设备分开。sw360dp xxxhdpi还以S7为目标,因此在xml文件中定义marginLeft时,这两个设备实际上会将某些屏幕元素显示为大约60dp关闭 我试图定义h740dp和h740dp xxxhdpi、568dpi、142dpi,以及我从这个伟大的设备规范资源中得到的一些其他变体: 我还没有能够瞄准S8,我认为必须有

在使用Android像素特定布局多年后,我遇到了“nnndpi”限定符。我还没有能够专门针对三星Galaxy S8,将其与从sw360dp xxxhdpi文件夹中取出的其他设备分开。sw360dp xxxhdpi还以S7为目标,因此在xml文件中定义marginLeft时,这两个设备实际上会将某些屏幕元素显示为大约60dp关闭

我试图定义h740dp和h740dp xxxhdpi、568dpi、142dpi,以及我从这个伟大的设备规范资源中得到的一些其他变体:


我还没有能够瞄准S8,我认为必须有一种方法瞄准这一特定设备和市场上的任何其他设备(无论这是否是一种糟糕的设计实践)。

三星Galaxy S8屏幕在xxxhdpi下为360dp x 740dp。可用于此屏幕的资源限定符包括:

  • sw360dp
    (最小宽度)-S8将始终与此匹配
  • w360dp
    (可用宽度)-无论方向如何,S8都将与之匹配(因为其横向宽度将远远超过360dp)
  • h740dp
    (可用高度)-S8将在纵向上与此匹配(尽管不完全匹配;请参见下文)
  • xxxhdpi
    (像素密度)-S8将始终与此匹配
h740dp
限定符的问题在于“可用宽度/高度”限定符没有给出实际屏幕大小;对于持久化UI,它们会进行减法,如状态栏和导航栏。状态栏通常为24dp,导航栏更大(通常为48dp或更大),但这两者都不能保证(如果使用
fitsSystemWindows
或以其他方式隐藏这些栏,则可以得到不同的结果)

除此之外,任何基于屏幕大小的“定位”都有可能锁定其他设备,因为没有什么能阻止LG创造一款屏幕至少为360x740dp的xxxhdpi手机


总之,这意味着你不应该做你正在做的事情。但是,如果您必须这样做,那么我将尝试以下一组限定符:
layout-sw360dp-h668dp-xxxhdpi
用于纵向(您可以试验用于
hXXXdp
的确切数字,以说明状态和导航栏)和
layout-sw360dp-w740dp-xxxhdpi
用于景观。

您不应该针对特定设备进行布局。这些分类是为了使布局符合一般设备规范。你应该为你的尺寸使用
dp
值,而不是'px.@TheWander我知道这不是我在问题中所说的最佳设计实践,只是想知道如何使用nnndpi限定符,因为它是Google给我们的,这是一个多么好的答案…祝你在web上找到除此之外的布局文件夹语法好运!我确实试过布局-h740dp-land-xxxhdpi。。现在尝试一下在一些测试之后,layout-sw360dp-w668dp-xxxhdpi工作了!我认为其中至少有一个是错误的,因为你在回答中写了layout-sw360dp-h668dp-xxxhdpi。。有人会认为名称中的sw和w会抵消或导致错误。。。疯狂的冷静回答我的朋友。。针对特定目标更改所有内容devices@Eir假设密度为3.5,1440x2880屏幕将为411x822
dp
。因此您可以尝试
layout-sw411dp-h750-xxxhdpi
。最小宽度是
411
,因为它总是411dp宽(至少),而可用高度是
750
,因为状态栏是822减24,导航栏是减48。我提到的密度值是用实际像素密度除以160得到的。如果屏幕的ppi为564,则
564/160=3.525
。然后,您可以通过将像素尺寸除以该值来计算
dp
尺寸,因此
1440/3.525=408.51
(因此可能四舍五入到408或409dp)。然而,设备的真实像素密度(564)通常不是安卓用于数学的。。。获取一个
DisplayMetrics
实例,并检查
密度的列表。这是Android用于数学计算的实数。因此,dpi值是
640
,宽度是
1440px
,高度是
2672px
640/160=4
,因此宽度为
1440px/4=360dp
,高度为
668dp
。总之,这将为您提供
layout-sw360dp-h668dp-xxxhdpi
。。。但是你所拥有的也应该有用,所以我有点困惑。