+1  A: 

Canvas is practically a wrapper around the Canvas of Skia (native graphics engine). Skia doesn't perform any BiDi/reshaping, it simply draws sequences of glyphs.

TextView, on the other way, uses a load of Android's text-related objects, among them Layout and derived classes which do simple (actually dumb) BiDi. Android's BiDi is very dumb that it can't even handle digits in RTL: 'طولي 180' is displayed 'طولي 081'.

Personally I don't trust Android's current BiDi, and would write my own Unicode-BiDi compliant class and use it if I need. I suggest you use manual BiDi in addition to the manual reshaping bro. Remember: First BiDi, then reshape!

Salam

tareqHs
Do you have any suggestions for freely available BiDi implementations I could drop into my application?
Casey
I think the official unicode bidi document (http://unicode.org/reports/tr9/) includes suggested Java and C++ implementations, bet these include no optimizations which are necessary for a resource-limited devices such as phones
tareqHs
A: 

Dear Mr tareqHs,

I have a similar requirement. I am able to reshape the Arabic characters and display them too. I am rehsaping them in Styled.java (foreach() method). But I am facing performance problems. When I am composing some message, as the number of characters keep increasing, the reponse becomes too slow so much so that the device does not respond for a few seconds.

Am I doing it in the wrong place? If so any suggestions in this regard would be much appreciated.

Thanks and Regards RK

RK