dp与px,sp的安卓转换。

来源:互联网 发布:海康威视网络监控方案 编辑:程序博客网 时间:2024/06/05 07:39

一种是网上的单位转换代码:

/**      * 根据手机的分辨率从 dp 的单位 转成为 px(像素)      *     * @param context      * @param dpValue      */      public static int dip2px(Context context, float dpValue) {          final float scale = context.getResources().getDisplayMetrics().density;          return (int) (dpValue * scale + 0.5f);      }      /**      * 根据手机的分辨率从 px(像素) 的单位 转成为 dp      *     * @param context      * @param pxValue      */      public static int px2dip(Context context, float pxValue) {          final float scale = context.getResources().getDisplayMetrics().density;          return (int) (pxValue / scale + 0.5f);      }      /**          * 将px值转换为sp值,保证文字大小不变          *           * @param pxValue          * @param fontScale          *            (DisplayMetrics类中属性scaledDensity)          * @return          */          public static int px2sp(Context context, float pxValue) {              final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;              return (int) (pxValue / fontScale + 0.5f);          }          /**          * 将sp值转换为px值,保证文字大小不变          *           * @param spValue          * @param fontScale          *            (DisplayMetrics类中属性scaledDensity)          * @return          */          public static int sp2px(Context context, float spValue) {              final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;              return (int) (spValue * fontScale + 0.5f);          } 

另一种是用安卓自带的类转换。

实际上,Android中也提供了单位转换的函数,那就是TypedValue类。

TypedValue.COMPLEX_UNIT_SP,16 设置成16sp。

TypedValue:这个类是工具类,作为一个动态容器,它存放一些数据值,这些值主要是

resource中的值。TypedValue类把对应的值转化为实际屏幕上的点值,也就是像素

值。

具体的用法如下:

TypedValue.applyDimension(int unit, float value, DisplayMetrics metrics)

其中,第一个参数是你想要得到的单位,第二个参数是你想得到的单位的数值,第三个

参数封装了显示区域的各种属性值。

例如,我要得到一个25sp,那么我就用

TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,

25,context.getResources().getDisplayMetrics())

就是说,我想要一个25(第二个参数)SP(第一个参数)在当前设备上对应的px值。

注意:

COMPLEX_UNIT_DIP:乘以显示密度density(dpi/160)。

TypedValue.COMPLEX_UNIT_SP:乘以像素密度scaledDensity(=density)。

原创粉丝点击