java - 将 nnndpi 用于 Android 布局文件夹

标签 java android android-studio

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

我尝试定义 h740dp 和 h740dp-xxxhdpi、568dpi、142dpi,以及我从这个很棒的设备规范资源中想到的其他一些变体:https://material.io/tools/devices

我无法针对 S8,并且认为必须有一种方法可以针对此特定设备和市场上的任何其他设备(无论这是否是一个糟糕的设计实践)。

最佳答案

Samsung 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 横向。

关于java - 将 nnndpi 用于 Android 布局文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53055398/

相关文章:

java - 如何将我的代码变成异步任务?

java - 我的线程是否并行运行?

android - 如何在 `Theme.Sherlock.Dialog` 中隐藏标题?

android - 在客户端上使用 SERVER API key 是否可以,是否可以在不使用 SERVER API key 的情况下向设备组发送 GCM 消息?

java - Android 旋转器未选择任何项目

android - 使用 Gradle 依赖项私下分发 AAR

Java Thread Ping Pong 示例

android - 为 buildvariant 替换 AndroidManifest.xml 中的字符串不适用于 Gradle Android 插件版本 > 0.5.4

java - 无法找到 Urbanairship.provider 的提供商信息

java - 谁能解释为什么这段代码只在构造函数中起作用?