Respuestas:
Tendrá que convertirlo de dps a píxeles utilizando el factor de escala de visualización.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
a px
? Gracias.
Sé que esta es una vieja pregunta, sin embargo, he encontrado una forma mucho más ordenada de hacer esta conversión.
Java
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Kotlin
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
anterior es el valor DP que desea convertir a PX
Mirando su requerimiento, también hay una solución alternativa. Parece que conoce las dimensiones en dp en tiempo de compilación, por lo que puede agregar una entrada de dimen en los recursos. Luego puede consultar la entrada de dimen y se convertirá automáticamente a píxeles en esta llamada:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
Y tu dimens.xml tendrá:
<dimen name="dimen_entry_in_dp">72dp</dimen>
Extendiendo esta idea, simplemente puede almacenar el valor de 1dp o 1sp como una entrada de dimen y consultar el valor y usarlo como un multiplicador. Con este enfoque, aislará el código del material matemático y dependerá de la biblioteca para realizar los cálculos.
La forma más simple (e incluso funciona desde la API 1) que probó es:
getResources().getDimensionPixelSize(R.dimen.example_dimen);
De documentaciones:
Recupere una dimensión para un ID de recurso particular para usar como tamaño en píxeles sin formato. Esto es lo mismo que getDimension (int), excepto que el valor devuelto se convierte a píxeles enteros para su uso como tamaño. Una conversión de tamaño implica redondear el valor base y garantizar que un valor base distinto de cero tenga al menos un píxel de tamaño.
Sí, redondeando el valor, pero no es muy malo (solo en valores impares en dispositivos hdpi y ldpi necesitan agregar un pequeño valor cuando ldpi no es muy común) Lo probé en un dispositivo xxhdpi que convierte 4dp a 16 (píxeles) y eso es cierto.