【问题标题】:Trying to define which layout should a device use尝试定义设备应使用哪种布局
【发布时间】:2013-03-21 19:03:50
【问题描述】:

我正在尝试了解哪种布局使用哪种设备。

例如,我有不同的布局:

  • 布局
  • layout-sw600dp
  • 布局-sw720dp

Nexus 7" (800x1280) 使用 layout-sw600dp

三星 GTp3100 7" (600x1.024) 使用 layout-sw600dp

Samsung Tab 10.1 (1280x800) 使用 layout-sw720dp

Sony XPERIA S 4.3 (1280x720) 使用布局

你们能否解释一下“用你的话”为什么 XPERIA S 不使用 sw600dp 或 sw720dp? SW != 最小宽度? XPERIA S 中最小的是 720。它应该使用 sw720 或 sw600,对吧?还是我错了?

我已阅读大量文档,但无法理解为什么会发生这种情况。

非常感谢。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    Smallest-Width 限定符主要是指屏幕尺寸,而不是物理像素。

    例如,使用 sw720dp 意味着设备的最小屏幕宽度必须为 720 dp(与设备无关的像素)——这不是大约 720 个物理像素。从文档中...

    与密度无关的像素相当于 160 dpi 屏幕上的一个物理像素,这是系统为“中等”密度屏幕假定的基线密度。

    索尼 XPERIA S 4.3 的物理宽度是 2.5",但我不知道屏幕的实际宽度是多少。

    为了计算,我们假设屏幕覆盖了整个宽度......在这种情况下,我们只需使用 720 / 2.5 = 288dpi 来计算 dpi 的宽度。

    来自dp的文档...

    dp 单位到屏幕像素的转换很简单:px = dp * (dpi / 160)。

    重新排列上面的公式来计算dp 我们这样做...

    dp = px / (dpi / 160)
    

    ...这给了我们dp 中的宽度(以及必要的最小宽度限定符)...

    720 / (288 / 160) = 400dp
    

    简而言之,索尼 XPERIA S 4.3 可能具有高密度屏幕(就其尺寸而言),但它不是大屏幕。

    【讨论】:

    • 谢谢。设法通过此代码找到了这一点:float density = getResources().getDisplayMetrics().density; float dpHeight = outMetrics.heightPixels / density; float dpWidth = outMetrics.widthPixels / density; 顺便说一句,是否有任何公式可以得到该值“2.5”,与getResources().getDisplayMetrics().density; 得到的相同?
    • @SergiCastellsaguéMillán :您可以使用DisplayMetricsxdpiydpi 字段来获取每个维度的实际dpi。计算物理屏幕大小将只是我在答案中用来计算dpi 的公式的重新排列(例如,720 / 2.5 = 288 dpipx / size = dpi)所以px / dpi = size。从DisplayMetrics 你可以使用widthPixels / xdpi 来获取屏幕的物理宽度。
    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多