在android开发中,大部分情况下我们都用的dp值和sp值,这主要是用在xml文件中。但是很多时候我们需要在java代码中动态计算宽高、文字大小值,而这值是px值,这时我们需要将理想dp、sp值转成px值,以便于在更多的机型上能显示正常。
转换类:
package com.v.vutils.utils;
import android.content.Context;
/**
* dp、sp 转换为 px 的工具类
*/
public class DisplayUtils {
/**
* @return 屏幕像素宽度,px类型
*/
public static int getScreenWidth(Context context) {
return context.getResources()
.getDisplayMetrics().widthPixels;
}
/**
* @return 屏幕像素高度,px类型
*/
public static int getScreenHeight(Context context) {
return context.getResources()
.getDisplayMetrics().heightPixels;
}
/**
* 将px值转换为dip或dp值,保证尺寸大小不变
*/
public static float px2dip(Context context, float pxValue) {
float scale = context.getResources()
.getDisplayMetrics().density;
return (pxValue / scale);
}
/**
* 将dip或dp值转换为px值,保证尺寸大小不变
*/
public static float dip2px(Context context, float dipValue) {
float scale = context.getResources()
.getDisplayMetrics().density;
return (dipValue * scale);
}
/**
* 将px值转换为sp值,保证文字大小不变
*/
public static float px2sp(Context context, float pxValue) {
float fontScale = context.getResources()
.getDisplayMetrics().scaledDensity;
return (pxValue / fontScale);
}
/**
* 将sp值转换为px值,保证文字大小不变
*/
public static float sp2px(Context context, float spValue) {
float fontScale = context.getResources()
.getDisplayMetrics().scaledDensity;
return (spValue * fontScale);
}
}
使用:
// 20是需求的dp值
int px = (int) DisplayUtils.dip2px(getBaseContext(), 20f);