我正在使用我在另一个在mdpi屏幕上正常工作的线程上找到的代码:
public static float convertDpToPixel(float dp,Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi/160f);
return px;
}
public static float convertPixelsToDp(float px,Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float dp = px / (metrics.densityDpi /160f);
return dp;
}
在hdpi屏幕上使用时,文本大小会在尝试增加文本大小时跳转。我假设它是因为它在分割densityDpi时使用的是硬编码的160f?有没有动态的方法来确定它是160dpi还是240dpi?
答案 0 :(得分:2)
试试这个方法:
public float dpToPx(float dp, Context context) {
float density = context.getResources().getDisplayMetrics().density;
return dp * density;
}
答案 1 :(得分:1)
来自doc:
metrics.density
是您正在寻找的缩放系数。
这是密度独立像素单元的缩放系数,其中一个DIP是大约160 dpi屏幕上的一个像素(例如240x320,1.5“x2”屏幕),提供系统显示的基线。因此,在160dpi屏幕上,此密度值将为1;在120 dpi的屏幕上它将是.75;等