Android H5的目标密度DPI和window.innerWidth之间的关系是什么

Android H5的目标密度DPI和window.innerWidth之间的关系是什么,android,html,android-webview,viewport,Android,Html,Android Webview,Viewport,我的genymotion模拟器是googlenexus7-4.1.1api16-800*1280。 当我在Android上使用webview加载HTML5时,我对目标densitydpi和window.innerWidth之间的关系感到困惑 <meta name="viewport" content="width=device-width,**target-densitydpi=device-dpi**,initial-scale=1.0,minimum=1.0,maximum-scale

我的genymotion模拟器是googlenexus7-4.1.1api16-800*1280。 当我在Android上使用webview加载HTML5时,我对目标densitydpi和window.innerWidth之间的关系感到困惑

<meta name="viewport" content="width=device-width,**target-densitydpi=device-dpi**,initial-scale=1.0,minimum=1.0,maximum-scale=1.0,user-scalable=no">

$(function(){alert(window.innerWidth);   //get the viewport width
          alert(window.devicePixelRatio);})  //  always is 1.3312499523162842  no matter what target-densitydpi is
**目标密度dpi=设备dpi:*800

**目标密度dpi=低dpi:*452

**目标密度dpi=中等dpi:*602

**目标密度dpi=高dpi:*909

**忽略目标密度dpi:*602

如何计算窗宽?与window.devicePixelRatio有关吗?
谢谢大家!

如果可能,应避免使用
目标密度dpi
。此属性是非标准的,在现代版本的Android WebView中实际上已被弃用

大致上,
目标密度dpi
定义了CSS像素与屏幕像素比率的比例系数。其计算方法如下:

  • 对于
    设备dpi
    ,为1/设备比例因数;在您的情况下:
    1/(4/3)=0.75

  • 对于
    低dpi
    中dpi
    高dpi
    ,它不取决于设备特性,分别计算为160除以120、160和240,得到
    4/3
    1
    2/3


然后通过除以计算值来缩放CSS宽度。在您的例子中,未缩放的CSS宽度是602
(800/1.33124…
)。还有一些有趣的四舍五入调整,这就是为什么结果可以被某些单位抵消。

谢谢您的回答。我有一些问题如下:正如你所说,452=(800/(4/3))?不对!909是如何计算的?标度系数有问题吗?我没说452=(800/(4/3)),我说的是452~(602/(4/3))。909 ~ (602 / (2 / 3)). 602是无标度CSS宽度。您说过:对于设备dpi,为1/设备比例因子;在您的例子中:1/(4/3)=0.75,但为什么设备比例因子是4/3?,为什么602(800/1.33124…)是未缩放的CSS宽度?为什么800不是无标度css宽度?非常感谢。设备比例因子为4/3——这与您报告的
window.devicePixelRatio
为1.33的比例大致相同。。。。。我给你的好建议是阅读这篇关于CSS和物理屏幕像素之间关系的经典文章,这应该可以解释为什么在你的例子中CSS宽度是600px。谢谢你的回答。我们都知道window.devicePixelRatio=pixel/dip,dip表示与设备无关的像素,似乎window.devicePixelRatio无法控制**有些设备显示window.devicePixelRatio=2**,为什么?window.devicePixelRatio是生产者固定的吗?
                                   window.innerWidth