2012-12-06 52 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;等