2012-04-16 26 views
7

que tengo una aplicación para Android árabe, y aquí está el código XML:androide: gravedad = "derecho" no funciona en todos los dispositivos para el árabe y otros idiomas RTL

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/greygradientbackground"> 
<ImageView android:id="@+id/logo" 
    android:layout_width="150dp" 
    android:layout_height="fill_parent" 
    android:scaleType="centerCrop" 
    android:layout_margin="5dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" /> 
<TextView android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="16sp" 
    android:textColor="#000000" 
    android:layout_gravity="center_vertical|right" 
    android:gravity="right" 
    android:layout_toLeftOf="@id/logo"/> 
</RelativeLayout> 

El problema es que el androide: la gravedad funciona en algunos modelos de Android y en otros no.

Para ser más específicos, he probado la aplicación en muchos dispositivos Android 2.3.3 y el texto en árabe está alineado a la derecha. Sin embargo, en otros dispositivos 2.3.3, el texto en árabe está alineado a la izquierda (lo cual es incorrecto).

Cuando cambié android: gravity = "right" a android: gravity = "left", el problema pasó del segundo grupo de dispositivos al primero.

Así que mi pregunta es cómo puedo resolver este problema, especialmente que, por lo que sé, no hay una forma de localizar diseños basados ​​en el número de modelo de un dispositivo.

Gracias de antemano por cualquier orientación, porque estoy totalmente perdido. :(

ACTUALIZACIÓN:

Busqué sobre "Cómo alinear árabe correctamente en todas las versiones de Android?", Pero no encontré nada de trabajo en todos mis dispositivos de prueba Cualquier sugerencia por favor, estoy seguro de que hay una mejor.? enfoque de la práctica para alinear el texto en árabe en Android

ACTUALIZACIÓN 2:.

he intentado utilizar una vista Web en lugar de un TextView para alinear árabe correctamente utilizando estilos CSS Sin embargo, el texto árabe está mostrando en el WebVi. ew como personajes extraños

Aquí está el código:

mWebView.loadData("<html dir=\"rtl\">الأسم<body></body></html>", "text/html", "UTF-8"); 

Lo extraño es que los sitios web en árabe texto se muestra correctamente. ¿Entonces, cuál es el problema? :(

+0

¿Alguna respuesta o ayuda? –

+0

Hola, yo también tengo este problema en 3.x y versiones anteriores también. Así que alguien puede sugerir alguna respuesta para esto. – Raj

Respuesta

0

cambio de su textveiw en el diseño de este ....

<TextView android:id="@+id/title" 

cambio de su layout_width a "fill_parent"

 android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="16sp" 
    android:textColor="#000000" 
    android:layout_gravity="center_vertical|right" 
    android:gravity="right" 
    android:layout_toLeftOf="@id/logo" 
/> 

Puede cambiar la cosa de otra manera también .. ..Puedes hacer cambios en la clase de actividad ... de la siguiente manera ... deja que tu TextView con el título de identificación se mapee en la clase de actividad con un objeto TextView llamado "tv". Puedes alinearlo a la derecha al escribir esto.

tv.setGravity(Gravity.RIGHT); 

pero en ambos casos el ancho del ancho de la disposición debe ser "fill_parent" .. Si no hace esto y lo mantiene "wrap_content" entonces no hay espacio para que el texto se mueva ... todas las alineaciones (centro, izquierda, derecha ...) siguen siendo los mismos .....

Si ninguno de estos dos funciona ... entonces preferiría que utilizaras el diseño de la tabla y mantuvieras la vista de texto en ella ... .

+0

Hola Sagar, gracias por tu repetición. Ya lo he probado y no funciona en las tabletas Android 3.1. si le doy la gravedad como Derecha, viene por el lado izquierdo. y si doy gravedad a la izquierda, está viniendo en el lado derecho. pero otros dispositivos con sistema operativo v4.o y todos funcionan bien. – Raj

+0

@sagar Gracias por su ayuda. Desafortunadamente, no funcionó. :( –

0

intentar poner su TextView dentro de un LinearLayout separada, y un conjunto que Distribuciones de propiedades DeEstaManera: androide: layout_gravity = "center_vertical" y android: orientation = androide "vertical": la gravedad = "right"

nota: no especifique layout_gravity de la vista de texto.

Espero que esto ayude! funcionó bien para mí.

También puede intentar la solución proporcionada aquí: Android Arabic text aligment

4

Este es un comportamiento esperado. Está prohibido utilizar gravity="right", pero gravity="end" lugar, la misma idea se aplica a gravity="left" que podrá utilizar gravity="start", así como layout_marginStart en lugar de layout_marginLeft

De esta manera, Android va a poner el texto a la orientación de "arranque", dependiendo en la ubicación (Para nosotros, los estadounidenses, que comienzan escribir desde la izquierda y terminan en el derecho, pero los árabes inicio del derecho y final en el dejaron).

Puede obtener las direcciones diseño/texto con el método getLayoutDirectionFromLocale(null), esto devolverá View.LAYOUT_DIRECTION_LTR (de izquierda a derecha) o View.LAYOUT_DIRECTION_RTL (de derecha a izquierda, como árabe).

Más información se puede comprobar here

0

Otra solución para lograr tal comportamiento:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layoutDirection="ltr"   
     android:layout_weight="1" 
     android:gravity="end" 
     android:padding="16dp" 
     android:text="@string/locale_switch_btn" /> 
</LinearLayout> 

Tenga en cuenta que, para la correcta gravedad = "END" alineación, en lugares RTL Debe establecer la propiedad:

androide: layoutDirection = "ltr"

Cuestiones relacionadas