150829_理论_屏幕适配

来源:互联网 发布:ar2220 s网络配置实例 编辑:程序博客网 时间:2024/06/05 19:23

屏幕适配看多了,网上太多的理论已经晕了,就做了一些屏幕的数据测试,然后依据测试数据来总结一些东西吧。

获取数据源码:

DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int widthPixels = dm.widthPixels;int heightPixels = dm.heightPixels;int sDensityDpi = dm.densityDpi;float sDensity = dm.density;float scaledDensity = dm.scaledDensity;float xdpi = dm.xdpi;float ydpi = dm.ydpi;Log.i("BaseActivity", "1 widthPixels = " + widthPixels);  // 720Log.i("BaseActivity", "2 heightPixels = " + heightPixels);  // 1184Log.i("BaseActivity", "3 sDensityDpi = " + sDensityDpi); // 320Log.i("BaseActivity", "4 sDensity = " + sDensity);  // 2.0Log.i("BaseActivity", "5 scaledDensity = " + scaledDensity); // 2.0Log.i("BaseActivity", "6 xdpi = " + xdpi);  // 315.3Log.i("BaseActivity", "7 ydpi = " + ydpi);  // 318.74
以上就是dm的所有数据获取方式,依据参考文档获得的解释为:



下面展示测试数据,一共7个虚拟机外加2个真机


解释一下图片宽度这个数据的由来,我PS了一个长度为1000px的图片,然后,用HorizontalScrollView包裹,看整个屏幕上占到了图片的多少,来判断该屏幕以图片像素为单位的大小。即:该数据为n,则可表示为: 手机屏幕宽度 = n * 一个物理像素宽度  (并非屏幕像素)


做完以上数据,我这里就做一下自己的总结

第一:单位说明

widthPixels、heightPixels 的单位是:一个屏幕上屏幕像素的个数,注意我这里使用的文字是“屏幕像素”,这和我们通常说的图片像素大小是不一样的。

densityDip = 160 * density , 同时也近似于 xdpi,ydpi,scaleDensity; 而这几个的单位是:每英寸的屏幕像素个数。。

而这六个数据就是我所有的测试数据,足够讽刺的,原来基本都一样。这就是为什么,我们通常就操作widthPixels,heightPixels,density就够了。

第二:解释一下px,dp,ps。。总结完上面就好解释多了

px:一个屏幕像素的大小,一个屏幕的屏幕宽度,当然可以用 widthPixels * px = 屏幕宽度

dp:屏幕像素点的个数  除以density (即除以每英寸屏幕像素个数)  再乘以160的大小,也就是说:dp的大小 = 160 * 屏幕宽度(inch),其实这个数据也是近似的,看数据就知道


第三:着重解释两个数据的不同!!经常会弄混!!就是屏幕像素和图片像素!!!

屏幕像素:就是第一个表格的"widthPixels"

图片像素:就是第一个表格的"图片宽度(大概)"

可以明显的看出它们的单位大小是完全不同的!!而且没有任何规律可以寻找!!


经过这次,以后的使用我总结种方法:

第一:

还是和以往一样,用px 和 dp ,只是要注意他们的含义:

dp:它是和你的尺子测出的宽度(物理宽度)是完全成正比的,与其他任何都没有关系,无论在哪个手机上你设置为200dp,那么你用尺子测出的数就是一个定值(超过屏幕宽的不算)。

px:它除了和物理宽度相关,还和屏幕像素密度有关,因此经常用作图片显示。

顺带说一下sp吧,sp基本和dp大小一致,偶尔会因手机系统设置的字体大小和样式做出调整。

第二:

极端设想一下,A手机是720dp,B手机是360dp,那么你设置一个marginleft(360dp),那么A就完全看不见了,B还是在中间。

那么我们就想,要是有百分比的适配方法。

做法:

Way1:听说最近google有一个百分比的适配新的api,值得去尝试;

Way2:就是假设app开始的时候,将widthPixels分成720份,若给你的设计图的宽度是720px,这样设计图上的一个px,就表示屏幕的1/720了。 这样就只需要用widthPixels这一个单位。爽吧!!! 这要求和设计妹子勾搭好,这点很重要!!不仅可以做到屏幕适配的百分比分配,说不定还可以解决终生大事~~~安静安静







0 0