CrazyDailyQuestion icon indicating copy to clipboard operation
CrazyDailyQuestion copied to clipboard

说一下RTL语言适配的实现过程

Open MicroKibaco opened this issue 4 years ago • 1 comments

MicroKibaco avatar Nov 06 '20 14:11 MicroKibaco

1)AndroidManifest image

2)Layout xml 布局适配

适配原则,在任何横向布局上,不是绝对的left和right,而是使用start和end。 image

需要注意的是,minSdkVersion<17,那么需要把left/start,right/end同时写上。但是gravity可以不需要同时写上,因为官方定义start end 值兼容了left right image

  1. 资源适配 由于部分资源是有左右方向的,例如返回按钮的图片资源。通用适配方法: image

4)Java 代码布局适配 image

总结:

  1. 判断当前应该使用RTL或者LTR
  2. 获取View方向:ViewCompat.getLayoutDirection(view),需要注意的是在View构造函数中,getLayoutDirection总是返回LTR
  3. 获取某个Locale语言方向: TextUtilsCompat.getLayoutDirectionFromLocale(locale)
  4. 获取当前Activity使用的方向:context.getResources().getConfiguration().getLayoutDirection()
  5. 对相对屏幕左边的X值进行翻转 image

MicroKibaco avatar Nov 09 '20 22:11 MicroKibaco