最近在开发中遇到屏幕适配的问题:都是使用dp为单位,出来的效果却不一样。
对比手机:
两个手机屏幕尺寸相同,都是5.7英寸,同样画100dp的线,在屏幕上的长度却不一样,Note5上显示的要短一些。
安卓根据手机ppi设置dpi,分为 120(ldpi)、160(mdpi)、213、240(hdpi)、280、320(xhdpi)、360、400、420、480(xxhdpi)、560、640(xxxhdpi);
根据DisplayMetrics可以获取到手机dpi,Note5比较特殊为560(ppi为515),A8为480(ppi为386)。
所以
Note5 dp=160*1440/560=411
A8 dp=160*1080/480=360
安卓会自动根据手机的大小(按宽度算 dp为单位)去选择values或者values-swxxxdp。
sw为small width,后面接的值表示,屏幕的最小宽度dp大于这个值的时候启用。
所以写了两个dimens.xml分别放在
res/values/dimens.xml
res/values-sw400dp/dimens.xml
Note5会找values-sw400dp/dimens.xml,A8会找默认的values/dimens.xml;
默认的总宽度为360dp,放在values/dimens.xml文件中:
<resources>
<dimen name="DIMEN_1dp">1dpdimen>
<dimen name="DIMEN_2dp">2dpdimen>
<dimen name="DIMEN_3dp">3dpdimen>
<dimen name="DIMEN_5dp">5dpdimen>
<dimen name="DIMEN_6dp">6dpdimen>
<dimen name="DIMEN_7dp">7dpdimen>
<dimen name="DIMEN_8dp">8dpdimen>
<dimen name="DIMEN_10dp">10dpdimen>
<dimen name="DIMEN_11dp">11dpdimen>
<dimen name="DIMEN_12dp">12dpdimen>
<dimen name="DIMEN_13dp">13dpdimen>
<dimen name="DIMEN_14dp">14dpdimen>
<dimen name="DIMEN_15dp">15dpdimen>
<dimen name="DIMEN_16dp">16dpdimen>
<dimen name="DIMEN_18dp">18dpdimen>
<dimen name="DIMEN_20dp">20dpdimen>
<dimen name="DIMEN_22dp">22dpdimen>
<dimen name="DIMEN_24dp">24dpdimen>
<dimen name="DIMEN_26dp">26dpdimen>
<dimen name="DIMEN_30dp">30dpdimen>
<dimen name="DIMEN_32dp">32dpdimen>
<dimen name="DIMEN_36dp">36dpdimen>
<dimen name="DIMEN_40dp">40dpdimen>
<dimen name="DIMEN_42dp">42dpdimen>
<dimen name="DIMEN_45dp">45dpdimen>
<dimen name="DIMEN_46dp">46dpdimen>
<dimen name="DIMEN_50dp">50dpdimen>
<dimen name="DIMEN_52dp">52dpdimen>
<dimen name="DIMEN_60dp">60dpdimen>
<dimen name="DIMEN_65dp">65dpdimen>
<dimen name="DIMEN_70dp">70dpdimen>
<dimen name="DIMEN_80dp">80dpdimen>
<dimen name="DIMEN_90dp">90dpdimen>
<dimen name="DIMEN_100dp">100dpdimen>
<dimen name="DIMEN_120dp">120dpdimen>
<dimen name="DIMEN_130dp">130dpdimen>
<dimen name="DIMEN_150dp">150dpdimen>
<dimen name="DIMEN_190dp">190dpdimen>
<dimen name="DIMEN_200dp">200dpdimen>
<dimen name="DIMEN_240dp">240dpdimen>
<dimen name="DIMEN_250dp">250dpdimen>
<dimen name="DIMEN_255dp">255dpdimen>
<dimen name="DIMEN_300dp">300dpdimen>
resources>
411dp的宽度呢?由于411和360是1.14倍的关系,所以 DIMEN_1dp = 1.14dp
<resources>
<dimen name="DIMEN_1dp">1.2dpdimen>
<dimen name="DIMEN_2dp">2.4dpdimen>
<dimen name="DIMEN_3dp">4.8dpdimen>
<dimen name="DIMEN_5dp">6dpdimen>
<dimen name="DIMEN_6dp">7.2dpdimen>
<dimen name="DIMEN_7dp">8.4dpdimen>
<dimen name="DIMEN_8dp">9.6dpdimen>
<dimen name="DIMEN_10dp">12dpdimen>
<dimen name="DIMEN_11dp">13.2dpdimen>
<dimen name="DIMEN_12dp">14.4dpdimen>
<dimen name="DIMEN_13dp">15.6dpdimen>
<dimen name="DIMEN_14dp">16.8dpdimen>
<dimen name="DIMEN_15dp">18dpdimen>
<dimen name="DIMEN_16dp">19.2dpdimen>
<dimen name="DIMEN_18dp">21.6dpdimen>
<dimen name="DIMEN_20dp">24dpdimen>
<dimen name="DIMEN_22dp">26.4dpdimen>
<dimen name="DIMEN_24dp">28.8dpdimen>
<dimen name="DIMEN_26dp">31.2dpdimen>
<dimen name="DIMEN_30dp">36dpdimen>
<dimen name="DIMEN_32dp">38.4dpdimen>
<dimen name="DIMEN_36dp">43.2dpdimen>
<dimen name="DIMEN_40dp">48dpdimen>
<dimen name="DIMEN_42dp">50.4dpdimen>
<dimen name="DIMEN_45dp">54dpdimen>
<dimen name="DIMEN_46dp">55.2dpdimen>
<dimen name="DIMEN_50dp">60dpdimen>
<dimen name="DIMEN_52dp">62.4dpdimen>
<dimen name="DIMEN_60dp">72dpdimen>
<dimen name="DIMEN_65dp">78dpdimen>
<dimen name="DIMEN_70dp">84dpdimen>
<dimen name="DIMEN_80dp">96dpdimen>
<dimen name="DIMEN_90dp">108dpdimen>
<dimen name="DIMEN_100dp">120dpdimen>
<dimen name="DIMEN_120dp">144dpdimen>
<dimen name="DIMEN_130dp">156dpdimen>
<dimen name="DIMEN_150dp">180dpdimen>
<dimen name="DIMEN_190dp">228dpdimen>
<dimen name="DIMEN_200dp">240dpdimen>
<dimen name="DIMEN_240dp">288dpdimen>
<dimen name="DIMEN_250dp">300dpdimen>
<dimen name="DIMEN_255dp">306dpdimen>
<dimen name="DIMEN_300dp">360dpdimen>
resources>