2011-02-16 19 views

cevap

26

yılında yazmadan bunu yapmak için herhangi bir yol yoktur, ben bir düzen var ve boyut 20dp olmak istiyorum demek Bir Etkinlik, tabii ki, getContext()'u bırakırsınız.

Ölçeklendirilmiş piksellerden (sp) piksellere dönüştürmek için metrics.density yerine metrics.scaledDensity kullanın.

DÜZENLEME: dışarı @Santosh's answer puan, sen yardımcı sınıf TypedValue kullanarak aynı şeyi yapabilir gibi: sp için

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

, TypedValue.COMPLEX_UNIT_DIP için TypedValue.COMPLEX_UNIT_SP yerine.

Dahili olarak, applyDimension() tam olarak yukarıdaki kodumla aynı hesaplamayı yapar. Kullanılacak kod sürümü, kodlama stilinizdir.

+2

yardımcı diğer benzer yöntemler neden 0.5 eklerim içeren eşdeğerdir? – pankajagarwal

+3

Yuvarlanmak için, çerçeve budur. Bu, boyutun asla 0px olmayacağını garanti eder. –

+0

teşekkürler, oldukça mantıklı görünüyor :) – pankajagarwal

4

Sen

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

şimdi kullanabilirsiniz pixels değeri 20dp

TypedValue dönüşüm