首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
拉勾
V2EX  ›  问与答

最近 Android 碰到一个适配问题,仔细研究了下 DPI 的问题,依然有些不解,望大佬解惑

  •  
  •   cxtrinityy · 7 天前 · 310 次点击
    DPI 是个印刷术语,衍生到屏幕后应该叫 PPI,Pixel Per Inch,但是实际上我手头有两台华为 pad,同为 10.1 英寸,相同的分辨率 1920*1200,但是通过 DisplayMetrics.densityDpi 获取的 DPI 却并不相同,一台只有 240,另一台 8.0 系统的即使调整设置(Setting) - 显示(Display) - 显示模式( Display Size )为最小,也有 272 的 dpi,而且实际相同布局在两台 pad 上的确有比较大的差异
    而根据 PPI 的公式,可以算出 dpi = 1920/(((10.1^2/(16^2+10^2))^0.5)*16)=224,这个值和 240 有点差距,可能有效计算区域稍有不同,但是和 272 差距就略大了
    这就很奇怪了,就我所知,在物理尺寸不变的情况下,DPI 的变化必然会导致分辨率的变化,但实际上通过 DisplayMetrics.widthPixels 在两台 pad 上获取的值的确是 1920,而且 Display Size 的变化也会变更 dpi 的值,但不会改变分辨率,实在是想不明白,可见是我目前对 DPI、分辨率的了解存在部分缺失的认知,希望有大佬解答下
    5 回复  |  直到 2019-03-14 10:11:27 +08:00
        1
    ysc3839   7 天前
    DisplayMetrics.densityDpi 是系统里设置的 DPI,不代表实际屏幕的 DPI。
        2
    cxtrinityy   7 天前
    @ysc3839 即使这样,也无法解释相同尺寸和分辨率的 pad 具有不同 dpi 这个问题,所以我好奇到底哪一环漏了
        3
    ysc3839   7 天前
    @cxtrinityy 系统里设置不同就不同了。
        4
    cxtrinityy   7 天前
    @ysc3839 但是单位 dp 对应到屏幕的物理大小的确在两台 pad 上是不一样的,同样的布局在两台 pad 上展示并不相同,那么这些设置对 dp 的计算会产生什么样的影响?考虑实际 dpi 本身就是为了适配,即使这些设置不代表实际 dpi,但确切的对适配上产生了影响
        5
    cxtrinityy   7 天前
    @ysc3839 我知道问题在哪了,DisplayMetrics.xdpi/ydpi 代表的是实际的物理 dpi,这个值两个 pad 返回的都是 224、225 左右,我的布局出现偏差问题在于我绘制布局的时候调用了 Resource.getDimensionPixelSize 这个方法来转换 dp,而这个转换方法是以 dp*DisplayMetrics.density , 这个 density 正是你说的系统设置的 densityDp 相对于基准 160 的缩放倍率
    我只要用 xdpi 计算实际的 dpi 的缩放倍率来重新计算应该就可以解决我的问题了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3474 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 16ms · UTC 05:18 · PVG 13:18 · LAX 22:18 · JFK 01:18
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1