Android 单位转换(dp、sp、px)
2016-03-16 16:06
495 查看
Android 系统屏幕密度信息见下表:
独立像素密度 dp
Android 系统使用 mdpi 即密度值为 160 的屏幕作为标准,在这个屏幕上 1px = 1 dp。例如同样是 100dp 的长度,在 mdpi 中为 100px,在 hdpi 中为 150px。各个密度值中的换算公式,在 mdpi 中 1 dp = 1 px,在 hpdi 中 1dp = 1.5 px,在 xhpi 中 1 dp = 2px,在 xxhdpi 中 1 dp = 3 px。所以各个分辨率直接换算比例:
ldpi: mdpi: hdpi: xhdpi: xxhdpi = 3: 4: 6: 8: 12。
下面是单位转换(可以作为工具类):
DisplayUtil.java :
其中 density 就是前面所说的换算比例,这里使用的是公式换算方法进行转换。同时,系统也提供了 TypedValue 类帮助我们转换,代码如下:
独立像素密度 dp
Android 系统使用 mdpi 即密度值为 160 的屏幕作为标准,在这个屏幕上 1px = 1 dp。例如同样是 100dp 的长度,在 mdpi 中为 100px,在 hdpi 中为 150px。各个密度值中的换算公式,在 mdpi 中 1 dp = 1 px,在 hpdi 中 1dp = 1.5 px,在 xhpi 中 1 dp = 2px,在 xxhdpi 中 1 dp = 3 px。所以各个分辨率直接换算比例:
ldpi: mdpi: hdpi: xhdpi: xxhdpi = 3: 4: 6: 8: 12。
下面是单位转换(可以作为工具类):
DisplayUtil.java :
package com.imooc.anim; import android.content.Context; /** * dp、sp 转换为 px 的工具类 */ public class DisplayUtil { /** * 将 px 值转换为 dip 或 dp, 保证尺寸大小不变 * DisplayMetrics 类中的 density 属性 * @param context * @param pxValue * @return */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int)(pxValue / scale + 0.5f); } /** * 将 dip 或 dp 值转换为 px 值,保证尺寸大小不变 * DisplayMetrics 类中的 density 属性 * @param context * @param dipValue * @return */ public static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int)(dipValue * scale + 0.5f); } /** * 将 px 值转换为 sp 值,保证文字大小不变 * DisplayMetrics 类中的 scaledDensity 属性 * @param context * @param pxValue * @return */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int)(pxValue / fontScale + 0.5f); } /** * 将 sp 值转换为 px 值,保证文字大小不变 * DisplayMetrics 类中的 scaledDensity 属性 * @param context * @param spValue * @return */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int)(spValue * fontScale + 0.5f); } }
其中 density 就是前面所说的换算比例,这里使用的是公式换算方法进行转换。同时,系统也提供了 TypedValue 类帮助我们转换,代码如下:
/** * dp2px 系统提供的 TypedValue 类帮我们转换 * @param context * @param dp * @return */ protected int dp2px(Context context,int dp) { return (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); } /** * sp2px 系统提供的 TypedValue 类帮我们转换 * @param context * @param sp * @return */ protected int sp2px(Context context, int sp) { return (int)TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics()); }
相关文章推荐
- Android模仿表单上传文件
- android上传图片(及普通参数)到服务器(j2ee后台服务器,ssh框架)
- Android之判断手机是否联网
- Android-BaseLine框架初识之MVP模式最佳方案(三)
- android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
- android 一个页面内 多个listview的实现滑动显示
- Android下使用正则表达式
- Android之将对象转换json字符串
- Android消息推送1----原始的socket长链接
- Android之二维码的生成
- android中广播的使用(动态和静态注册)
- Android 颜色透明度
- 安卓TextView设置字体竖直排列
- Android自定义View流程
- android:name 的秘密
- 为了安全——应用锁屏开发实战
- 把Android源码中的密码对转换为keystore的方法
- android的Devices窗口中Online显示成Offline
- Android Interview Collection
- android的Devices窗口中Online显示成Offline