您的位置:首页 > 移动开发 > Android开发

Android 尺寸单位 屏幕适配

2015-01-09 16:22 375 查看
ppi (pixels per inch):图像分辨率 (在图像中,每英寸所包含的像素数目)

dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,dp和px的换算公式 :

dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。


sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。

sp 与 px 的换算公式:sp*ppi/160 = px


是不是看起来dp和sp一样,在Android设计原则中,有提到这两个单位,他建议文字的尺寸一律用sp单位,非文字的尺寸一律使用dp单位。例如textSize="16sp"、layout_width="60dp"。

为什么要把sp和dp代替px?最简单的原因是他们不会因为ppi的变化而变化,在相同物理尺寸和不同ppi下,他们呈现的高度大小是相同。也就是说更接近物理呈现,而px则不行。

以160ppi为标准,看看Android对应的Drawable文件夹下的比例



一下是一些机型的屏幕尺寸和对应ppi



我们开发的时候,可以写一个工具类对尺寸单位进行转换,比如

public class DimenUtils {

public static int sp2px(Context context, float spValue) {
float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}

public static int px2sp(Context context, float pxValue) {
float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}

public static int dip2px(Context context, int dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}

public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐