Detectar si un carácter unicode es compatible?
Estoy tratando de armar una pequeña aplicación para Android que puede devolver aleatoriamente un emoji al usuario. Mi intención es usar caracteres emoji unicode reales y devolverlos como caracteres de cadena unicode.
He construido una serie completa de cadenas Unicode que podría ser elegido al azar, y muchos se mostrará correctamente. Sin embargo, algunos se muestran como caracteres no admitidos (un rectángulo con una x a través de ella).
- Android TextView no muestra Grabación de sonido Copyright símbolo "℗"
- Carácter de unicode de entrada de shell de adb
- Cómo mostrar la fuente telugu en el emulador correctamente
- Mostrar icono de emoji / emoción en Android TextView
- Mostrar todos los caracteres Unicode en TextView
Obviamente no todas las plataformas soportarán todos los caracteres unicode emoji, pero si es posible me gustaría una manera de determinar qué es y no es un personaje compatible. Lo ideal sería consultar una lista de caracteres admitidos, pero ser capaz de probar caracteres individuales también haría el trabajo bien.
- El carácter Unicode ("\ u232B") no se muestra en el botón
- Soporte Unicode para Android
- Escriba el número dentro de ayah end unicode símbolo árabe
- Cómo mostrar heart sign in android usando Html.fromHtml
- Diferentes idiomas en la vista de texto en Android
- Android IME que acepta unicode
- El carácter Unicode en Android no se muestra
- Codificación de caracteres de cadena con Android y Oracle Java
Por lo tanto, cuando se habla de un carácter que no es "compatible", suena como lo que quieres decir es que la fuente actual no tiene un glifo para el carácter (y la aplicación no tiene lógica de fallback para encontrar una fuente diferente que Hace , o el sistema no tiene ninguna fuente que hace).
En Java regular, esto es bastante fácil: dada una instancia de java.awt.Font
, puede ver si tiene un glifo para un carácter Unicode dado usando el método canDisplay
.
Las API de Android, por la razón que sea, no parecen exponer una forma de averiguar qué tipo de letra está trabajando. ( android.graphics.Typeface
mantiene esa información privada: consulte "Comprobar la familia de un objeto Typeface en Android" .) Sin embargo, al menos puede probar algo como new java.awt.Font("SansSerif", java.awt.Font.PLAIN, 12)
para obtener una fuente básica de 12 puntos sans-serif. Usted querrá probar, por supuesto, para ver si eso da una aproximación útil para el emoji que la fuente real será capaz de mostrar.
Puede utilizar Character.isDefined
para comprobar si un carácter está definido en la versión de Unicode en el dispositivo.
También revisa Canvas.hasGlyph(String)
, que se agregó en el nivel 23. Puede usar esto para probar si un personaje como un emoji tiene un glifo disponible.
Esto es lo que dice la documentación :
boolean hasGlyph (String string)
Determine si el tipo de letra establecido en la pintura tiene un glifo que admite la cadena. El caso más simple es cuando la cadena contiene un solo carácter, en el que este método determina si la fuente tiene el carácter. En el caso de varios caracteres, el método devuelve true si hay un solo glifo que representa la ligadura. Por ejemplo, si la entrada es un par de símbolos indicadores regionales, determine si hay un indicador emoji para el par.
Por último, si la cadena contiene un selector de variación, el método sólo devuelve true si las fuentes contienen un glifo específico para esa variación.
La comprobación se realiza en toda la cadena de fallback, no sólo en la fuente inmediata a la que se hace referencia.
Ver también
- Cómo detectar compatibilidad de emoji en Android por código
- Cambiar el icono del cajón de navegación y el espaciado del texto
- Viewpager no obtiene el último elemento