Android 屏幕適配:最全面的解決方案
Android開發(fā):最全面、最易懂的Android屏幕適配解決方案
切圖問題
UI切的是ios的斟湃,在做一些特殊的背景時半抱,寬是750,而我們的經(jīng)常以720為準哈肖,這樣圓容易變形。因此切成寬為720的為好
dp和sp在部分機型上的不匹配解決辦法
在android內(nèi)部會使用TypedValue.applyDimension函數(shù)將所有單位換算成px
觀察dip和sp的換算念秧,主要就是density和scaledDensity的區(qū)別淤井,
public static float applyDimension(int unit, float value, DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
dp和sp的區(qū)別在于density和scaledDensity兩個值上;
變量density
float類型,display的logic-density币狠。是一個scaling-factor游两,
Density-independent pixel (dp)獨立像素密度。標準是160dip.即1dp對應1個pixel漩绵,計算公式如:px = dp * (dpi / 160)贱案,屏幕密度越大,1dp對應 的像素點越多止吐。
上面的公式中有個dpi宝踪,dpi為DPI是Dots Per Inch(每英寸所打印的點數(shù)),也就是當設備的dpi為160的時候1px=1dp
160dpi的screen提供系統(tǒng)display的baseline
160dpi的screen-density值為1(160/160)
120dpi的screen-density值為0.75(120/160)
screen-1碍扔,已知240x320肴沫,1.5”x2” ,可以計算出densityDpi等于160蕴忆。即240/1.5=160颤芬,或320/2=160。再通過densityDpi/160計算出density的值1.0套鹅。
screen-2站蝠,已知320x480,1.5”x2”卓鹿,可以計算出densityDpi等于240菱魔。即320/1.5=240,或480/2=240吟孙。再通過densityDpi/160計算出density的值1.5澜倦。
關(guān)于scaledDensity **
float類型,一個scaling-factor杰妓,用于fonts顯示藻治,同density相同的值,除非由于基于font-size上的體驗需要做微調(diào)**巷挥。
TyuMainApp.getApp().getResources().getDisplayMetrics()對象中的屬性值
*總結(jié)一下: **
dp只跟屏幕的像素密度有關(guān)桩卵;
sp和dp很類似但唯一的區(qū)別是,android系統(tǒng)允許用戶自定義文字尺寸大斜侗觥(小雏节、正常、大高职、超大等等)钩乍,當文字尺寸是“正常”時1sp=1dp=0.00625英寸怔锌,而當文字尺寸是“大”或“超大”時寥粹,1sp>1dp=0.00625英寸变过。類似我們在windows里調(diào)整字體尺寸以后的效果——窗口大小不變,只有文字大小改變排作。
先打框框,慢慢完善
http://blog.csdn.net/u010181592/article/details/50012397
http://blog.csdn.net/lmj623565791/article/details/49990941
http://blog.csdn.net/u010181592/article/details/50012397
http://blog.csdn.net/lmj623565791/article/details/45460089