Respostas:
Direto para o código
int padding_in_dp = 6; // 6 dps
final float scale = getResources().getDisplayMetrics().density;
int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
getResources()
seja uma função herdada por uma atividade, mas estou tentando usar essas linhas em um adaptador de visualização de lista personalizado. Existe alguma maneira de fazer isso se não puder ligar getResources()
?
Se você definir a dimensão (em dp ou qualquer outro) em um arquivo XML (o que é melhor de qualquer maneira, pelo menos na maioria dos casos), você pode obter o valor de pixel usando este código:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Existe uma maneira melhor de converter valor em dp programaticamente:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Em seguida, aplique dpValue
ao seu método, por exemplo:setPadding(dpValue,dpValue,dpValue,dpValue);
Você pode calcular os pixels para um valor de DPI específico: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
Tenho o mesmo problema. A única solução que encontrei (realmente não vai te ajudar :)) é configurá-lo no arquivo Xml.
Se você pode obter a densidade do código, pode usar a conversão: "A conversão de unidades de mergulho em pixels da tela é simples: pixels = quedas * (densidade / 160)." (de http://developer.android.com/guide/practices/screens_support.html )
Editar: você pode obter a densidade da tela: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi