Pregunta

¿Tiene setWidth (int píxeles) el uso de dispositivos de píxeles independientes o píxel físico como unidad? Por ejemplo, hace setWidth (100) establece la anchura de una vista a 100 salsas o 100 pxs?

Gracias.

¿Fue útil?

Solución

Se utiliza píxeles, pero estoy seguro de que se esté preguntando cómo utilizar las inmersiones en su lugar. La respuesta está en TypedValue.applyDimension() . Aquí está un ejemplo de cómo convertir las caídas de 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()));

Otros consejos

La forma correcta para obtener un número constante de caídas en código es crear un archivo XML que contiene los recursos dp valora un poco como:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

A continuación, se refieren al recurso en el código de este modo:

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

El flotador de haber regresado luego disminuir en consecuencia la densidad de píxeles del dispositivo y por lo que no es necesario para mantener la replicación de un método de conversión a través de su aplicación.

Método setWidth (100), ajuste 100 px como la anchura (no en dp) .Así que puede enfrentar los problemas de anchura variable en diferente medida uso phones.So androide en dp en lugar de pixels.Use el siguiente código para obtener la medición en dp de anchura de la muestra = 300 px y la altura = 400 píxeles.

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;

Fuente (@Romain Guy)

Píxeles Por supuesto, el método está pidiendo píxeles como parámetro.

En base a las respuestas anteriores que funciona bien para mí, genero algunos métodos helper , hay que añadirlas en sus utilidades de utilizarlos 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());
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top