【问题标题】:Alternative to using dp-width as discriminator for different layouts?替代使用 dp-width 作为不同布局的鉴别器?
【发布时间】:2014-10-27 16:37:52
【问题描述】:

我正在创建一个 android 应用程序,它应该在多个不同的设备上运行,并且物理屏幕尺寸明显不同。 推荐的方法似乎是通过设备的 dp-width 来区分屏幕尺寸,例如为相应的设备创建一个“layout-w700dp”文件夹。

我在三星 Galaxy Note 2 (5.5") 和三星 Galaxy S4 mini (4.3") 上测试了我的应用程序。由于可用空间,它们都以不同的方式显示布局,因此需要不同的布局文件。

问题出在:它们都报告了 640 的 dp-width。Note 的 dp-factor 为 2,像素宽度为 1280,S4 mini 的 dp-factor 为 1.5,宽度为 960px。如何为设备使用不同的布局文件?物理尺寸无疑存在巨大差异,老实说,我很想知道“设备独立”测量报告每个设备的宽度相同的原因。

还有其他方法可以为每个设备使用不同的布局文件吗?

编辑:由于内部限制,我无法提供应用程序的图像,但基本上我需要为我的按钮使用不同的背景,因为“wrap_content”考虑了背景大小(以像素为单位),因此,由于密度较低,它们在 S4 mini 上会更大。如果我不这样做,S4 上的按钮太大并且重叠。

提前致谢!

【问题讨论】:

  • 这种布局在两种设备上的显示有何不同?能否提供截图以及布局xml?
  • @helleye:我编辑了我的问题

标签: android layout resources width


【解决方案1】:

毫无疑问,物理尺寸差异很大,我 老实说,想知道“设备独立”的原因是什么 测量报告每个设备的宽度相同

当然,这两个设备在 dp 中具有相同的屏幕尺寸。如下:

1dp = 1px 在 1.0 密度屏幕中,并且

1dp = 1.5px 在 1.5 密度屏幕中,并且

1dp = 2.0px 在 2.0 密度屏幕中。

所以 Note 有 1280/2.0 = 640dp,mini 有 960/1.5 = 640 dp。但是你要时刻牢记,屏幕密度只是android工程师用来简化开发者任务的一个桶。也就是说,如果一个设备是180dpi,它的密度是1.0,220dpi的屏幕密度是1.5 .

有没有其他方法可以为每个设备使用不同的布局文件?

这似乎是不可能的。

最后,如果您想完全控制您的布局,您可以尝试使用 DisplayMetrics 在 Java 代码中构建您的视图。(是的,这肯定不是一个好方法)。

【讨论】:

  • 我知道比赛已经结束,我只是惊讶于 android-framework 提供的密度值,其唯一目的是适应不同的屏幕尺寸和分辨率是不具体的(例如,桶大小是那么大)。开发人员真的应该以同样的方式处理 4.3 英寸和 5.5 英寸的屏幕吗?我将通过在 dp 中指定所有内容并在两个设备上使用相同的布局来解决我的问题。将不再有视觉错误,但我也无法使用 Note 的空闲空间。
  • 其实我觉得工程师可能希望我们在这两个设备中使用相同的布局
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 2010-12-21
  • 2019-07-29
  • 1970-01-01
  • 2011-09-10
相关资源
最近更新 更多