标签:
像素单位转换dp-px
直接转换:int dp= (int) (px / context.getResources().getDisplayMetrics().density + 0.5f);int px= (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);封装为方法:
/*** 根据手机的分辨率从 dp 的单位 转成为 px(像素)*/public static int dp2px(Context context, float dpValue) {float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}/*** 根据手机的分辨率从 px(像素) 的单位 转成为 dp*/public static int px2dp(Context context, float pxValue) {float scale = context.getResources().getDisplayMetrics().density;return (int) (pxValue / scale + 0.5f);}
屏幕规格参数
像素比例 每英寸像素数 分辨率xxhdpi 3 480 1080*1920 1080P 144*144 重点关注xhdpi 2 320 720*1280 720P 96*96 适配基准hdpi 1.5 240 480*800 WVGA 72*72mdpi 1.0 160 320*480 HVGA 48*48 基准ldpi 0.75 120 240*320 QVGA 36*36
字体的单位
1、TextView.setTextSize默认传入的单位是sp,TextView.getTextSize返回值是px,Paint.setTextSize传入的也是px总结:代码中设置的值都是px,除了TextView.setTextSize
2、TextView有一个可以指定单位的设置字体大小的方法setTextSize(int unit, int size):第一个参数可设置如下静态变量:
- TypedValue.COMPLEX_UNIT_PX : Pixels
- TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
- TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
setTextSize(TypedValue.COMPLEX_UNIT_PX, getTextSize());//注意:setTextSize默认单位是SP,而getTextSize()默认单位是PX
名词解释
- Px(像素Pixel) 不同设备上显示时像素数不会变,比如指定控件的长度是100px,那不管分辨率是多少控件长度都是100px。也正是因为如此才产生了屏幕适配问题。
- Screen Size(屏幕尺寸) 一般所说的手机屏幕大小如5.0英寸,都是指的对角线的长度,而不是手机面积。
- Resolution(分辨率) 在屏幕上显示的物理像素总和。比如分辨率是720*1280,则指设备垂直方向有1280个像素点,水平方向有720个像素点。需要注意的是:尽管分辨率通常用宽x高表示,但分辨率并不意味着具体的屏幕长宽比,比如分辨率为720*1280的手机屏幕宽高比不一定是720:1280,但是为了显示效果和谐,两者一般都是一致的。
- Density(密度) 指单位英寸中的像素数。DisplayMetrics类中属性density的值即为此值,可用于px与dip的互相转换
- Dpi(像素密度dots per inch ) 指每英寸中的像素数。dp是一个与密度无关的像素,在不同的像素密度的设备上会自动适配,在逻辑尺寸上,与一个位于像素密度为 160DPI 的屏幕上的像素是一致的,在运行的时候,平台会以目标屏幕的密度作为基准,处理所有需要的DIP缩放操作。假定设备分辨率为320*240,屏幕长2英寸宽1.5英寸,dpi=320/2=240/1.5=160,此160dpi表示手机水平或垂直方向上每英寸距离有160个像素点。要把DIP像素转换为屏幕像素,可以用这样一个简单的公式: pixels = dips * (density / 160)。
- Dip(设备独立像素Device-independent pixel) 同dp,不同设备有不同的显示效果,这个和设备硬件有关,不依赖像素。dip和具体像素值的对应公式是dip值 =设备密度/160* pixel值,可以看出在dpi为160dpi的设备上1px=1dip
- Sp(放大像素ScaledPixels) 主要用于字体显示(best for textsize)。根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知 Android 默认使用 sp 作为字号单位。
标签:
原文地址:http://www.cnblogs.com/baiqiantao/p/5270888.html