2011-02-16 68 views

回答

26

寫在視圖中可以這樣做:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
float dp = 20f; 
float fpixels = metrics.density * dp; 
int pixels = (int) (fpixels + 0.5f); 

在一個活動,當然,你離開了getContext()

要從縮放像素(sp)轉換爲像素,只需使用metrics.scaledDensity而不是metrics.density

編輯:由於@Santosh's answer指出,你可以使用實用工具類TypedValue同樣的事情:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
float dp = 20f; 
float fpixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics); 
int pixels = Math.round(fpixels); 

對於sp,替代TypedValue.COMPLEX_UNIT_SPTypedValue.COMPLEX_UNIT_DIP

在內部,applyDimension()的計算與我上面的代碼完全相同。使用哪個版本是您編碼風格的問題。

+2

幫助你爲什麼要加0.5? – pankajagarwal 2011-02-16 05:51:26

4

您可以使用

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics()); 

現在的pixels的價值相當於20dp

TypedValue包含其他類似的方法,在轉換