Quiero dibujar texto con una altura específica (en píxeles) en una vista usando Canvas
. ¿Puedes simplemente usar Paint.setTextSize(float)
con el número de píxeles o está usando dp
o sp
?¿Qué unidad de medida usa Paint.setTextSize (float)?
Respuesta
Se utiliza píxeles, pero se puede convertir a DP utilizando 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;
}
Estos métodos incluyen DisplayMetrics
que se puede añadir en el futuro SDK de Android.
píxeles a mojar:
public static float getDipFromPixels(float px) {
return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_PX,
px,
Resources.getSystem().getDisplayMetrics()
);
}
Dip de píxeles:
public static float getPixelsFromDip(float dip) {
return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dip,
Resources.getSystem().getDisplayMetrics()
);
}
La forma más fácil de obtener un valor de píxeles para tales métodos es simplemente definir la DP apropiado o valor SP en los Dimens archivo .xml y recupérelo así:
int sizeInPx = context.getResources().getDimensionPixelSize(R.dimen.sizeInSp);
En realidad 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 se REDONDEA al valor entero más cercano y garantiza que un valor de entrada distinto de cero da como resultado un valor de salida distinto de cero (por ejemplo, 0.1 se devuelve como 1, no como 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.
Esta es la mejor respuesta; funciona correctamente en todos los dispositivos existentes Y continuará funcionando en dispositivos futuros (a Todd Davies le faltan las nuevas densidades, como xhdpi, xxhdpi, etc.). Esto también es más flexible, puede proporcionar un archivo dimens.xml alternativo para diferentes tamaños de pantalla (tabletas, etc.) o cambiar entre dp y sp, según sea necesario. – NaxyMatt
Sí, la respuesta de TheIT es la mejor respuesta, como dice WanderingLinguist, porque la solución de Todd Davies debe actualizarse para incluir también xHigh, xxhigh y xxxhigh y tv cases y los casos que aparezcan en el futuro que sean complicados y se rompan fácilmente, en su lugar de la respuesta de TheIT que funcionará ahora y en el futuro, incluso si lo que los dispositivos vendrán y la solución funciona, ya que Android está planificado para manejar toda la densidad de dispositivos reales. –
- 1. ¿Qué unidad de medida usa Paint.setStrokeWidth()?
- 2. Cómo establecer la unidad para Paint.setTextSize()
- 3. Unidad de medida API en Java?
- 4. ¿Qué unidad de medida se usa para determinar la precisión del GPS con la API geo HTML5?
- 5. ¿Qué usa para probar la unidad de su IU web?
- 6. ¿Cómo puedo definir un miembro de extensión en una unidad de medida F #?
- 7. ¿Cómo se representan las unidades de medida?
- 8. ¿Qué unidades de medida usan Silverlight y WPF?
- 9. ¿Cuál es la unidad de medida para diapositivas de PowerPoint con VBA?
- 10. Método de prueba de unidad que usa controles de IU
- 11. ¿Qué lenguaje de plantilla usa Tumblr?
- 12. Unidad de medida para la columna Duración en el Analizador de SQL
- 13. ¿Qué es una "Unidad"?
- 14. ¿Cómo funcionan las unidades de medida F #?
- 15. Cómo probar el código de unidad que usa HostingEnvironment.MapPath
- 16. Usa Scala para probar la unidad de Java?
- 17. Scipy.cluster.hierarchy.fclusterdata + medida de distancia
- 18. Convierte float [] en byte [] en float [] nuevamente
- 19. Cuál es la unidad de medida del tiempo de duración de los medios de comunicación en MediaMetadataRetriever
- 20. ¿Qué se usa para probar el código C de la unidad?
- 21. ¿Por qué la operación de dibujo en el lienzo de Android usa float en lugar de int para (x, y)?
- 22. ¿Deben localizarse las unidades de medida?
- 23. Pérdida de precisión convirtiendo 'float' en NSNumber, volviendo a 'float'
- 24. ¿Qué significa 'punto y coma' como una unidad de tamaño
- 25. Float Arc4random?
- 26. ¿Qué lenguaje .NET usa para escribir Pruebas Unitarias?
- 27. 32651: ERROR comparación de Float con Float Falló Ruby
- 28. Medida de gastos de subprocesos
- 29. C++ float to int
- 30. valor mínimo de float en java es positivo ¿por qué?
Gracias por responder tan rápido. – marzipankaiser
@Todd Davies: ¿cómo puedo usar esto dentro de una clase de vista personalizada? No se puede usar getWindowManager() – Neil
@Neil: puede usar el método de View 'getContext()' para obtener 'Context', después de eso puede llamar a' Context.getSystemService (Context.WINDOW_SERVICE) 'para obtener' WindowManager'. Más sobre esto aquí http://developer.android.com/reference/android/view/WindowManager.html. – Tzoiker