2012-12-06 58 views
0

我使用这个代码,我已经在另一个线程发现这是工作的罚款于mdpi屏幕到新闻部MDPI和HDPI屏幕:转换像素

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屏幕上的文字大小跳跃时试图增加文字大小。我假设它是因为它在使用硬编码160f时除以densityDpi?有没有什么动态的方法来确定它是160dpi还是240dpi?

回答

2

试试这个方法:

public float dpToPx(float dp, Context context) { 
    float density = context.getResources().getDisplayMetrics().density; 
    return dp * density; 
} 
1

doc

metrics.density 

是你正在寻找的缩放因子。

这是密度独立像素单元,其中,一个DIP是一个像素的约160dpi屏幕上(例如,240×320,1.5“×2”画面)的比例因子,提供了系统的显示的基线。因此在160dpi的屏幕上,这个密度值将是1;在120 dpi的屏幕上它将是0.75;等