Android中dp,px,sp等单位转换

原创 2016年06月01日 12:27:28

一般我们都会自己写一个dp转px或者sp转px的工具类,给个链接http://blog.csdn.net/top_code/article/details/8588703
但是今天我发现Android自带了这种转换工具类TypedValue,下面是转换的方法

    /**
     * Converts an unpacked complex data value holding a dimension to its final floating 
     * point value. The two parameters <var>unit</var> and <var>value</var>
     * are as in {@link #TYPE_DIMENSION}.
     *  
     * @param unit The unit to convert from.
     * @param value The value to apply the unit to.
     * @param metrics Current display metrics to use in the conversion -- 
     *                supplies display density and scaling information.
     * 
     * @return The complex floating point value multiplied by the appropriate 
     * metrics depending on its unit. 
     */
    public static float applyDimension(int unit, float value, DisplayMetrics metrics) {
        switch (unit) {
        case COMPLEX_UNIT_PX:
            return value;
        case COMPLEX_UNIT_DIP:
            return value * metrics.density;
        case COMPLEX_UNIT_SP:
            return value * metrics.scaledDensity;
        case COMPLEX_UNIT_PT:
            return value * metrics.xdpi * (1.0f/72);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (1.0f/25.4f);
        }
        return 0;
    }

可以看出,这个方法不仅支持dp转px,sp转px,还有不常用的pt、in等单位的转换。只是不懂为啥网上自己做转换时都要+0.5f,意思是想向上取整,但是意义何在呢?


注意,在代码中设置TextView字体大小时不需要进行转换:

    /**
     * Set the default text size to the given value, interpreted as "scaled
     * pixel" units.  This size is adjusted based on the current density and
     * user font size preference.
     *
     * @param size The scaled pixel size.
     *
     * @attr ref android.R.styleable#TextView_textSize
     */
    @android.view.RemotableViewMethod
    public void setTextSize(float size) {
        setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
    }

    /**
     * Set the default text size to a given unit and value.  See {@link
     * TypedValue} for the possible dimension units.
     *
     * @param unit The desired dimension unit.
     * @param size The desired size in the given units.
     *
     * @attr ref android.R.styleable#TextView_textSize
     */
    public void setTextSize(int unit, float size) {
        Context c = getContext();
        Resources r;

        if (c == null)
            r = Resources.getSystem();
        else
            r = c.getResources();

        setRawTextSize(TypedValue.applyDimension(
            unit, size, r.getDisplayMetrics()));
    }

可以看出,直接设置以sp为单位的字体大小就OK。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android dp和px/sp等单位相互转换

  • 2015年12月28日 13:56
  • 6KB
  • 下载

Android开发之单位转换,dp、px、sp

Android开发之单位转换,dp、px、sp 在开放过程中,毕竟UI不是程序员画的,碰到专业技术好点的美工还好,碰到刚开始搞ui的,提供的图片尺寸,字体大小,切图尺寸各种让你无奈。在这里可以解...

Android dip/dp sp px 单位转换小结 applyDimension

import android.content.Context; import android.util.TypedValue;/** * 说明:相对于官方内部转换 都+0.5f的原因:根据网上的...

Android的计量单位px/dip/dp/sp/pt/in/mm,及相互转换

px   :是屏幕的像素点 in    :英寸 mm :毫米 pt    :磅,1/72 英寸 dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px dip  :等...

Android根据分辨率进行单位转换-(dp,sp转像素px)

Android系统中,默认的单位是像素(px)。也就是说,在没有明确说明的情况下,所有的大小设置都是以像素为单位。 如果以像素设置大小,会导致不同分辨率下出现不同的效果。那么,如何将应用中所有大...

Android中常用单位dp,px,sp之间的相互转换

MainActivity如下: package cc.testunitswitch; import android.os.Bundle; import android.util.DisplayMet...
  • lfdfhl
  • lfdfhl
  • 2013年10月31日 17:38
  • 2081

Android中,单位dp、sp、px互相转换工具类

可以定义一个工具类,用来获取系统的转化比值,然后需要使用时调用即可。具体代码如下: /** * dp、sp转化工具 * * @author h55l5 * */ public class ...
  • h55l55
  • h55l55
  • 2016年03月27日 22:10
  • 457

Android 的几个单位dp 、sp、px的转换

由于项目只出了一套苹果的标注图1242x2208,所以我们的就得自己计算转换成Android的单位。我们Android的目标分辨率是1080x1920 ,dpi是480的;1080是1242的1.15...
  • lvbo23
  • lvbo23
  • 2016年09月20日 16:47
  • 257

Android原生系统API自带dp、px、sp单位转换

Android系统中自带的Api中可以使用TypedValue进行单位转换1,调用系统api转换单位// 获得转换后的px值 float pxDimension = TypedValue.applyD...
  • mingda8
  • mingda8
  • 2017年02月28日 12:07
  • 224

Android单位转换 (px、dp、sp之间的转换工具类)

原文出自:http://blog.csdn.net/mouse12138/article/details/51249027 package com.njxz.sy.deliverysystem....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中dp,px,sp等单位转换
举报原因:
原因补充:

(最多只允许输入30个字)