La función de Android View.setPadding(int left, int top, int right, int bottom)
solo acepta valores en px pero quiero establecer el relleno en dp. ¿Hay alguna manera de evitarlo?
Respuestas:
Directo al 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()
es una función heredada por una actividad, pero estoy tratando de usar estas líneas en un adaptador de vista de lista personalizado. ¿Hay alguna forma de que pueda hacer esto si no puedo llamar getResources()
?
Si define la dimensión (en dp o lo que sea) en un archivo XML (que es mejor de todos modos, al menos en la mayoría de los casos), puede obtener el valor de píxel usando este código:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Hay una mejor manera de convertir valor a dp mediante programación:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Luego aplique dpValue
a su método, por ejemplo:setPadding(dpValue,dpValue,dpValue,dpValue);
Puede calcular los píxeles para un valor de DPI específico: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
Tengo el mismo problema. La única solución que he encontrado (realmente no te ayudará :)) es configurarla en el archivo Xml.
Si puede obtener la densidad del código, puede utilizar la conversión: "La conversión de unidades de inmersión en píxeles de pantalla es simple: píxeles = inmersiones * (densidad / 160)". (de http://developer.android.com/guide/practices/screens_support.html )
Editar: puede obtener la densidad de la pantalla: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi