赞
踩
Android支持的像素单位有:px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单位)、dip(就是dp)、sp(用于设置字体大小)。 其中,常用的有px、dp和sp三种。 具体来说,px是手机屏幕上可显示的最小单位,与物理设备的显示屏有关。一般来说,同样尺寸的屏幕(比如5寸的手机)看起来越清晰,像素的密度越高,以px计量的分辨率也越大。 dp与物理设备无关,只与屏幕的尺寸有关。一般来说,同样尺寸的屏幕以dp计量的分辨率是一样的,无论这个手机是哪个厂家生产的,dp大小都一样。 sp的原理跟dp差不多,专门用于设置字体大小。手机在系统设置里可以调整字体的大小(小、普通、大、超大)。 设置普通字体时,同数值dp和sp的文字看起来一样大;如果设置为大字体,用dp设置的文字没有变化,用sp设置的文字就变大了。 所以说,dp与系统设置的字体大小没有关系,而sp会随系统设置的字体大小变大或变小。 dp和px之间的联系取决于具体设备上的像素密度,像素密度就是DisplayMetrics里的density参数。 当density=1.0时,表示一个dp值对应一个px值 当density=1.5时,表示两个dp值对应3个px值 当density=2.0时,表示一个dp值对应两个px值 具体的转换函数如下:
- // 根据手机的分辨率从dp的单位转成px(像素)
- public static int dip2px(Context context, float dpValue){
- // 获取当前手机的像素密度
- final float scale = context.getResources().getDisplayMetrics().density;
- return (int)(dpValue*scale + 0.5f) // 四舍五入取整
- }
-
- // 根据手机的分辨率从px(像素)的单位转成为dp
- public static int px2dip(Context context, float pxValue){
- // 获取当前手机的像素
- final float scale = context.getResources().getDisplayMetrics().density;
- return (int)(pxValue / scale + 0.5f); // 四舍五入取整
- }
在XML布局文件中,为了让不同设备屏幕拥有统一的显示效果,除了sp用于设置文字大小外,其余要用尺寸大小的地方都用dp。 在代码中情况又有所不同,Android用于设置大小的函数都以px为单位。 无论是LayoutParams里的width和height,还是setMargins和setPadding,参数单位都是px,要想在代码中使用dp设置 布局大小或间距,得先把dp值转换成px值。 代码示例如下:
- // 将10dp的尺寸大小转换为对应的px数值
- int dip_10 = Utils.dip2px(this, 10L);
- // 从布局文件中获取名叫tv_padding的文本视图
- TextView tv_padding = findViewById(R.id.tv_padding);
- // 设置该文本视图的内部文字与控件四周的间隔大小
- tv_padding.setPadding(dip_10, dip_10, dip_10, dip_10);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。