¿Qué unidad de medida utiliza Paint.setTextSize (float)?
Quiero dibujar texto con una altura específica (en píxeles) en una vista con Canvas
. ¿Puedes simplemente usar Paint.setTextSize(float)
con el número de píxeles o es esto usando dp
o sp
?
Utiliza píxeles, pero puede convertirlo a dp usando este código:
double getDPFromPixels(double pixels) { DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); switch(metrics.densityDpi){ case DisplayMetrics.DENSITY_LOW: pixels = pixels * 0.75; break; case DisplayMetrics.DENSITY_MEDIUM: //pixels = pixels * 1; break; case DisplayMetrics.DENSITY_HIGH: pixels = pixels * 1.5; break; } return pixels; }
La manera más fácil de obtener un valor de px para tales métodos es simplemente definir el valor apropiado de dp o sp en el archivo dimens.xml y recuperarlo así:
int sizeInPx = context.getResources().getDimensionPixelSize(R.dimen.sizeInSp);
Usted realmente tiene 3 métodos disponibles para usar dependiendo de sus necesidades:
-
getDimension()
Devuelve un flotador en píxeles. -
getDimensionPixelSize()
Devuelve un int en píxeles. Esto es lo mismo que getDimension (), excepto que el valor devuelto es redondeado al valor entero más cercano y asegura que un valor de entrada diferente de cero da como resultado un valor de salida no cero (por ejemplo, 0.1 se devuelve como 1, no 0). -
getDimensionPixelOffset()
Devuelve un int en píxeles. Esto es lo mismo que getDimension (), excepto que el valor devuelto es TRUNCATED (es decir, redondeado hacia abajo). El resultado puede ser cero.
Estos métodos incluyen DisplayMetrics
que se pueden agregar al futuro SDK de Android.
Píxeles para sumergir:
public static float getDipFromPixels(float px) { return TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_PX, px, Resources.getSystem().getDisplayMetrics() ); }
Sumerción en píxeles:
public static float getPixelsFromDip(float dip) { return TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, dip, Resources.getSystem().getDisplayMetrics() ); }