2010-09-26 8 views
0

J'ai compris comment dessiner des caractères arabes correctement (connecté et droite à gauche) en utilisant des chaînes littérales comme ceci:Comment dessiner du texte arabe sur Android après avoir lu un fichier?

textView.setTypeFace(Typeface.createFromAssets(getAssets(),"DejaVuSans.ttf")); 
textView.setText("\uFEB3\uFE92\uFE98\uFE94"); 

Mais pour une raison que je ne peux pas obtenir le arabe à formater correctement si je lis quelque chose de un fichier en utilisant InputStreams comme ceci:

arabictext.txt:

سبتة 

et le code:

InputStream istream = as.open("arabictext.txt"); 

    String string; 
     BufferedInputStream bis = new BufferedInputStream(istream); 

     /* Read bytes to the Buffer until 
     * there is nothing more to read(-1). */ 
     ByteArrayBuffer baf = new ByteArrayBuffer(50); 
     int current = 0; 
     while((current = bis.read()) != -1){ 
       baf.append((byte)current); 
     } 

     /* Convert the Bytes read to a String. */ 
     string = new String(baf.toByteArray(), 0, baf.length(), "UTF-8"); 

puis en affichant la chaîne dans une vue de texte. Les lettres sont ordonnées correctement mais ne sont pas connectées et ne sont pas dans la forme appropriée pour la fin du mot/milieu du mot. Cela n'a aucun sens pour moi parce que je pensais que chaque forme de chaque lettre est un point de code Unicode différent.

2) Si vous placez les valeurs de code réelles dans le fichier, la textview affichera les valeurs des points de code sous forme de chaîne.

Toute aide serait appréciée! J'ai commencé à faire une vue personnalisée pour dessiner le texte, mais ça s'est compliqué, vite.

+0

Vous pouvez trouver votre solution [sur ce lien] (http://stackoverflow.com/a/7962813/779408). Prendre plaisir! :) – breceivemail

Répondre

3

salam Alaikom, En fait, il y a une différence entre le texte que vous utilisez dans le code direct:

textView.setText("\uFEB3\uFE92\uFE98\uFE94"); 

Et ce que tu as à partir du fichier que je suppose sera:

\u0633\u0628\u062a\u0647 

alors essayez pour insérer des caractères dans le format final (après le rendu) dans le fichier, vous obtiendrez le résultat attendu.

BR.

+0

En fait, j'ai fini par utiliser Arabic Reshaper d'Amr Gawash. Merci pour l'aide en tout cas. – you786