¿Cómo manejar los idiomas RTL en las versiones anteriores a la versión 4.2 de Android?

Fondo

TextView siempre tuvo problemas con los idiomas RTL (Right-To-Left). Ya que solo sé leer hebreo (además del inglés), hablaré sobre sus temas:

Sólo en la versión 4.2 (lea aquí , bajo "Soporte de RTL nativo"), Google ha solucionado todos los problemas relacionados con los hebreos (o al menos así parece).

El problema

Los problemas con el hebreo ha causado que cada portador israelí y cada fabricante de ROM personalizado tengan su propia solución de cómo solucionar los diferentes problemas, lo que hace que sea prácticamente imposible manejar texto RTL en dispositivos pre-4.2.

Las cosas pueden ser aún más frustrantes en el caso de que el texto incluya letras hebreas e inglesas.

Lo que he intentado

He leído muchos sitios web hablando de esos problemas, y he probado muchas variantes de las soluciones, ninguna ha resuelto el problema en todos los dispositivos:

  • Algunos sugieren poner el carácter '\ u200F' (o '\ u202D') al final / inicio / ambos del texto.

  • Algunos sugieren usar el método Html.fromHtml () y poner algo especial allí.

  • Algunos incluso sugieren utilizar el WebView en su lugar (y tal vez utilizar WebSettings.setDefaultTextEncodingName () ).

La pregunta

¿Hay una solución definitiva para este problema?

Supongo que lo mejor es que, debido a que Android 4.2 resuelve esto, y Android es de código abierto, deberíamos tener su TextView importado en una biblioteca que podamos usar, pero Google aún no ha proporcionado dicha biblioteca.

Lamentablemente, no creo que haya una buena solución ("bueno" significa "hace el trabajo y está fácilmente disponible"). Para nuestras propias aplicaciones para Android que admiten hebreo, usamos un mecanismo de renderizado personalizado que hemos desarrollado durante muchos años. El mecanismo de renderizado lo hace todo: las fuentes propietarias; Análisis bidireccional (bidi); Colocación de glifos; Análisis de ruptura de línea; Flujo de texto; Etc Algunos de los problemas que intentan utilizar capacidades nativas de manipulación de texto de Android (especialmente pre-4.2) son:

  1. Fuentes realmente malísimas. Sin embargo, puede empaquetar fuentes de terceros como DejaVu que son bastante buenas. La fuente correcta puede hacer maravillas con el posicionamiento de nekudot-y te'amim 1 , si usted necesita eso. (Estoy de acuerdo con usted acerca de la importancia de la colocación de apuntar correctamente, la lectura de texto hebreo con nekudot equivocado es como leer una pantalla llena de CAPTCHAs ).

  2. Análisis bidi de Buggy. Lo que lo hace peor es que los bugs parecen ser diferentes para diferentes versiones de Android. La modificación del texto para incluir códigos de formato bidi colocados estratégicamente (marca RTL, marca LTR, etc.) puede superar muchos de estos errores (consulte la discusión aquí , que no es específica de Android). Sin embargo, es una molestia hacer esto y, debido a las inconsistencias entre versiones de Androide, es difícil predecir por adelantado qué ayuda el marco va a necesitar.

  3. No (o mal pensado) conocimiento a nivel de marco de cuestiones de derecha a izquierda. Por ejemplo, buena suerte consiguiendo que la barra de desplazamiento se muestre en el lado izquierdo de un TextView hebreo. Para nuestras aplicaciones, tuvimos que construir un sistema completo de scroll-bar sólo para que funcionara como queríamos. (Bueno creo que Android es de código abierto!)

  4. Análisis de fracaso de líneas y palabras. Al menos una versión anterior de Android en la que probamos pensaba que cada marca de nikud era un límite de palabras. Cuando se trata de saltos de línea, el sistema a menudo no sabe cómo manejar la puntuación hebraica como maqaf, gershayim o sof pasuk.

  5. Algunos de los nuevos caracteres Unicode (como HOLAM HASER PARA VAV-U + 05BA-nuevo en Unicode 5.0) no son reconocidos como script hebreo por el sistema.

Mi recomendación es que, a menos que esté preparado para crear un sistema de manejo de texto de arriba abajo, usted se da por vencido en la visualización de texto de alta calidad en las versiones anteriores a la versión 4.2 de Android, especialmente si necesita respaldar nekudot y te'amim . Además, planea utilizar las técnicas que mencioné en los dos primeros puntos anteriores.

1 marcas de cantilación bíblica

A partir de agosto de 2013, Android ha publicado la documentación del API para un Formateador Bidireccional que podría adaptarse a sus necesidades. Esto está contenido en la biblioteca de Android Support v4 que creo que debería ejecutarse en versiones anteriores a Android 4.2.

Consulte: http://developer.android.com/reference/android/support/v4/text/BidiFormatter.html

  • Alineación derecha de Android TextView en un dispositivo de derecha a izquierda
  • ¿Cómo obtener el botón "arriba" utilizado en la barra de herramientas?
  • Bidi Derecho a Izquierda Idioma en Firemonkey Mobile
  • De derecha a izquierda SnackBar
  • Android: es el apoyo de diseño de restricciones RTL
  • Integración de Android Hebrew (RTL)
  • cómo cambiar la dirección del título de CollapsingToolbarLayout?
  • Desarrollar una aplicación de Android para apoyar Inglés y árabe "alineación de diseño"
  • Anular los soportesRtl en uno de los diseños
  • Identificar el idioma RTL en Android
  • ¿Cómo cambiar la fuente del cajón de navegación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.