美文网首页
【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