¿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:
-
Alineación de texto (y no estoy hablando de gravedad). Como un lenguaje RTL, el hebreo pone las palabras de derecha a izquierda (en comparación con el inglés, que es lo contrario).
- Use locale (ltr / rtl) para gravedad en TextView
- el cursor en la pista EditText no comienza desde la derecha para el árabe
- los elementos del lugar de visualización de la cuadrícula de Android de derecha a izquierda
- ¿Cómo posiciono el cursor a la derecha en EditText
- ¿Cuál es el estado de los idiomas de Right To Left en Android?
Para demostrar lo molesto que es, imaginar que en lugar de mostrar "Hello world". Usted consigue generalmente ".Hello mundo". Esto se podría arreglar fácilmente si lo tenías en una sola oración, pero es más difícil cuando hay varios caracteres de puntuación.
-
Posiciones vocales. El hebreo no requiere vocales para leer el texto, pero a veces es muy difícil de leer sin ellos (especialmente la Biblia). Para las vocales, el hebreo tiene lo que se llama "NIKUD", que son en realidad como puntos dentro de las letras. El problema en Android era que normalmente se colocaban en el lugar equivocado.
Para demostrar lo molesto que es, imaginar que en lugar de mostrar "Hello world". Usted obtiene generalmente ".eHlol owrld". Incluso si intenta arreglarlo (ponga las vocales siempre un carácter después del actual), la posición en la letra no es correcta (imagine que el "e" en "Hola" sería como por encima de la "H", para Ejemplo).
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.
- Cómo configurar el cajón de navegación para que se abra de derecha a izquierda
- ViewPager para diapositivas de pantalla de derecha a izquierda
- RTL se fuerza en dispositivos RTL
- Android context.getResources.updateConfiguration () desaprobado
- Cadena RTL hebrea de Android con valor numérico volteado
- Elemento de crecimiento de RecyclerView de derecha a izquierda
- Cómo especificar RTL específica drawables
- Establecer LayoutDirection (RTL) para api inferior a 17
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:
-
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 ).
-
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.
-
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!)
-
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.
-
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
- Archivo proguard obsoleto; Usar -contienen a los miembros en vez de -contemplarlosconmiembros
- Encuentra la ventana que contiene una vista en Android