美文网首页
【Android群英传】dp、sp、px单位转换

【Android群英传】dp、sp、px单位转换

作者: 感同身受_ | 来源:发表于2019-10-06 21:54 被阅读0次

两种方式:

1. 通过工具类实现

这个工具类可保存在android项目中,在绘图的时候作为工具类使用,转换dp、sp、px

import android.content.Context;

/**
 * dp、sp转换为px的工具类
 */
public class DisplayUtil {
    /**
     * 将px值转换为dip或dp值,保证尺寸大小不变
     *
     * @param context
     * @param pxValue
     *      DisplayMetrics类中属性density
     * @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值,保证尺寸大小不变
     * @param context
     * @param dipValue
     *     DisplayMetrics类中属性density
     * @return
     */
    public static int dip2px(Context context,float dipValue){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(dipValue * scale +0.5f);
    }

    /**
     * 将px值转换为sp值,保证文字大小不变
     * @param context
     * @param pxValue
     *      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 context
     * @param spValue
     *      DisplayMetrics类中属性scaledDensity
     * @return
     */
    public static int sp2px(Context context,float spValue){
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int)(spValue * fontScale +0.5f);
    }
}

2. 通过系统提供的TypedValue类实现

在Activity中实现下列方法,再进行调用,可实现转化

/**
     *dp2px
     */
    protected int dp2px(int dp){
        //系统提供的TypedValue类
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dp,getResources().getDisplayMetrics());
    }

    /**
     * sp2px
     */
    protected int sp2px(int sp){
        //系统提供的TypedValue类
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,sp,getResources().getDisplayMetrics());
    }

相关文章

网友评论

      本文标题:【Android群英传】dp、sp、px单位转换

      本文链接:https://www.haomeiwen.com/subject/jilppctx.html