I'm trying to add RTL language support in my app (specifically Arabic right now). I'll be supporting English as well. What I've done:
- Set minSdkVersion to 17
- Added
android:supportsRtl="true"
to my application tag in AndroidManifest.xml
- Switched my left/right attributes to start/end
At first I made these changes manually, then I used Android Studio's "Refactor -> Add RTL Support Where Possible..." menu item.
When I preview my layout files, I can see the RTL preview is properly mirroring the UI; however, even when I use the "Force RTL Layout Direction", my app doesn't display the RTL layout. The system UI is flipped, so that option does work in general.
Is there anything else I need to do to show the RTL layout? I'm hoping I have missed something obvious. I am testing this on an API 21 emulator.
Update
I inherited some of this code. Something might be overriding a setting and forcing this into LTR mode. I made a test application to test out RTL mode and it worked fine. What sort of code could cause the "Force RTL Layout Direction" setting to be ignored (or be overridden)?
Update 2
I've checked that the locale is being set properly, and it is. I also checked the configuration, and ldrtl
is set. I verified in the signed apk file that android:supportsRtl
made it in and none of the layout files had android:layoutDirection="ltr"
. I've even tried manually putting android:layoutDirection="rtl"
to try to force a layout to mirror, but that didn't work either.`
Update 3
I added another activity to the project, made it the launcher activity, and made sure it isn't connected to any existing code. It is a subclass of Activity
. The issue still exists. So theoretically this is a configuration issue. Like I said I checked the AndroidManifest.xml file and all the layout files that are generated, and the RTL support and layout changes all made it in. What could be going wrong with configuration?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…