¿SetWidth (int píxeles) utiliza píxeles independientes del dispositivo o píxeles físicos como unidad? Por ejemplo, ¿setWidth (100) establece el ancho de una vista en 100 dips o 100 pxs?
Gracias.
¿SetWidth (int píxeles) utiliza píxeles independientes del dispositivo o píxeles físicos como unidad? Por ejemplo, ¿setWidth (100) establece el ancho de una vista en 100 dips o 100 pxs?
Gracias.
Respuestas:
Utiliza píxeles, pero estoy seguro de que se está preguntando cómo utilizar las inmersiones. La respuesta está en TypedValue.applyDimension()
. Aquí hay un ejemplo de cómo convertir dips a px en código:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
La forma correcta de obtener un número constante de DIP en el código es crear un archivo XML de recursos que contenga valores dp un poco como:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
Luego, consulte el recurso en su código así:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
El flotador que ha devuelto se escalará en consecuencia para la densidad de píxeles del dispositivo, por lo que no es necesario que siga replicando un método de conversión en toda su aplicación.
Método setWidth (100), establezca 100 px como ancho (no en dp). Por lo tanto, puede enfrentar problemas de ancho variable en diferentes teléfonos Android. Por lo tanto, use la medición en dp en lugar de píxeles. Utilice el siguiente código para obtener la medición en dp del ancho de la muestra = 300px y altura = 400px.
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
Píxeles, por supuesto, el método solicita píxeles como parámetro.
Según las respuestas anteriores que me funcionan bien, genero algunos métodos de ayuda , solo agrégalos en tus utilidades para usarlos en todo el proyecto.
// value in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// value in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}