当我们进行Windows phone 8 开发时会遇到屏幕适配的问题,windows phone 8 支持如下分辨率的屏幕:
我们会发现,我们程序的多数页面会自动适配好,要理解这一行为最关键的是要弄明白WP布局时的单位
WP的底层框架式Silverlight 而Sliverlight可看成是WPF的子集所以WP的布局单位同WPF是一样的。
对布局单位的解释
首先我们看几个概念:
PX :这个很好理解,1px表示为一个像素点。
DPI(PPI)Dot per Inch 表示单位英尺上的像素点。及(PX/英寸)这是一个用来描述屏幕的参数,dpi越大可理解为屏幕越细腻(这两个实际为不同的概念,但多数情况下我们认为表示的是一个值)。
这两个概念熟悉后关键点就来了:
WPF(WP)中的布局单位(下面记为1wp单位)是一个与设备无关的单位,描述为 1/96 英寸。
也就是 1wp = 1/96英寸。
这个又如何理解呢,比如当前屏幕设备的DPI为96,那么可以简单的算出:
1wp = 1/96 (英寸)*96(PX/英寸)=1PX
而当设备的DPI为192时同理可以算出:
1wp = 1/96 *192 = 2px
针对wp8的疑问
WVGA和WXGA1.6倍的关系怎么来的?
在WVGA下定义一个高度为X的矩形,那么实际在设备中显示的像素点为 X*1/96*设备DPI
在WXGA中同样为X*1/96*设备DPI
我们通过勾股定理简单的计算出WVGA和WXGA的DPI关系 为:
WXGA DPI=1.6* WVGA DPI
所以图表中会列出1.6倍的那个关系。
图片为何发虚?
举例说明 有一张图片的实际px为100*100 我们将它放在page里面宽高设为为100wp*100wp
那么这张图片在96dpi的情况下在实际设备中通过100*100个px来展示
而在192dpi的时候 在实际设备中则会通过 200*200个px来展示,
如此便会在视觉上出现发虚的情况。