【问题标题】:Confusion in "smallest width dp" in AndroidAndroid中“最小宽度dp”的混淆
【发布时间】:2015-07-23 13:49:05
【问题描述】:

我正在学习如何在android中使用this使用“最小宽度dp”来支持不同的屏幕。

我知道下面的数字是 dp 中设备的最小边。

屏幕宽度 dp 的典型数字是:

320:手机屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。

480:像 Streak (480x800 mdpi) 这样的补间平板电脑。

600:7 英寸平板电脑 (600x1024)。

720:10 英寸平板电脑(720x1280、800x1280 等)。

根据this post nexus 6 有 730 x 410 dp。

Nexus 6 拥有令人印象深刻的 5.96 英寸 Quad HD 屏幕显示 分辨率为 2560 x 1440 (493 ppi)。这转换为 ~ 730 x 410 dp (与密度无关的像素)。

但正如this 中所解释的那样

           dp = (px/dpi)*160
              = (1440/493)*160
              = ~467

那么这怎么会转化为 730 x 410 dp? 此外,当我在 nexus 6 中运行演示时,设备正在使用 res/values-sw320dp/dimens.xml 下定义的填充尺寸

这让我很困惑。如何使用“最小宽度 dp”实际计算 dp 并相应地创建视图?

除了 res/values-sw320dp 我还有 res/value 和 res/values-sw600dp 下有dimens.xml。

UPDATE 弄清楚了我的困惑。检查问题下的评论。

【问题讨论】:

  • 检查this...它可能对你有帮助
  • 我用这个解决了这个问题。 link。 dp 是通过量化密度而不是物理密度计算的。所以 nexus 6 的 730 x 410 dp 是正确的。
  • 而 sw320dp 部分混淆是我理解的错误。使用 res/values-sw320dp 是因为定义的下一个存储桶是 res/values-sw600dp,它显然大于 410(如果 nexus 6,则为最小边)。

标签: android android-selector


【解决方案1】:

您可以使用以下代码获取正确的值:

DisplayMetrics displayMetrics = this.getResources().getDisplayMetrics();
    float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
    float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
    Log.d("dpHeight-----",String.valueOf(dpHeight));
    Log.d("dpWidth------",String.valueOf(dpWidth));

例如,对于 Xperia Z 1080x1920px,值是 360x592dp,设置是 values-sw360dp

【讨论】:

  • 是的,这给出了正确的值。 DisplayMetrics.density 用于缩放取决于量化密度的资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多