Android阿拉伯语UI适配问题汇总

Sensi Sun

  • RTL和LTR

LTR 是 Left-to-right(从左向右) 的缩写。(常用)

RTL 是 Right-to-left(从右向左) 的缩写。其意为人们书写阅读习惯是从右向左,朝左继续的。常见的RTL语言有阿拉伯语,希伯来语等。

从 Android 4.2 即 SDK 17 开始,提供了全面的本地布局支持,允许镜像布局,可以同时支持 RTL 和 LTR。

  • 阿拉伯语适配方法
  1. AndroidManifest.xml文件配置

在 AndroidManifest.xml 文件中 application 节点添加支持从右到左布局方式代码。

<application

...

android:supportsRtl="true" >

...

<licatio

  1. 切换语言
  2. AS一键适配

AS 支持一键适配 RTL,主要是在原来 Layout 中设置 Left 和 Right 属性的补充添加 Start 和 End 属性。Start 属性在 LTR 中对应 Left,在 RTL 中对应 Right,在API 17开始支持,为了兼容低版本,需要同时有 Left 和 Start。

Refactor > Add RTL Support Where Possible...

添加Start 和 End 属性有两种方法:

方法一:手动在原来 Layout 中设置 Left 和 Right 属性的补充添加 Start 和 End 属性。

风险分析:暂无。

方法二:导入第三方插件。

名称

描述

gradle-android-rtl

自动修复布局文件中未添加RTL支持的标签

与 AS 插件的比较:

  1. 性能更好。在处理大批量文件修改时,用AS工具会出现卡顿;
  2. 支持padding标签的补齐。
  3. 风险:可能会出现部分布局文件未添加RTL支持的标签。

【配置】

buildscript {

repositories {

// ...

maven { url "https://jitpack.io" }

}

dependencies {

classpath 'com.github.znyang:gradle-android-rtl:0.0.4'

}

}

apply plugin: 'com.zen.plugin.rtl'

rtl {

from = fileTree("${project.projectDir}/src/main/res/layout/")

// into = "${project.buildDir}/outputs/rtl/res/layout"

}

【输出】

gradle androidRtl

需要修复的layout文件会生成在rtl.into的目录下,可以在确认后覆盖到你的layout目录下,再进行一遍检查!

注:未定义rtl.into的情况下,修复的文件会直接覆盖原文件!

支持的标签如下:

{

"layout_toLeftOf", "layout_toStartOf",

"layout_toRightOf", "layout_toEndOf",

"layout_marginLeft", "layout_marginStart",

"layout_marginRight", "layout_marginEnd",

"layout_alignLeft", "layout_alignStart",

"layout_alignRight", "layout_alignEnd",

"layout_alignParentLeft", "layout_alignParentStart",

"layout_alignParentRight", "layout_alignParentEnd",

"drawableLeft", "drawableStart",

"drawableRight", "drawableEnd",

}

// padding只要存在left/right,就会补充四个标签

{

"paddingLeft", "paddingStart",

"paddingRight", "paddingEnd"

}

// 支持对以下标签的value替换(left->start, right->end)

{

"layout_gravity",

"gravity"

}

【如何验证修复完善?】

Android>Lint>Internationalization>Bidirectional Text

4.使用全局样式

  1. EditText

EditText 控件基本都需要设置下面两个属性:

android:textAlignment="viewStart"

android:gravity="start"

可以在 style.xml 样式中全部 EditText 都设置:

  1. TextView

全局给所有 TextView 添加一个 RTL 属性

【判断是否是 RTL 布局】

TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == LayoutDirection.RTL

  1. ViewPager

Android 官方控件大多支持 RTL,ViewPager 除外。

ViewPager的rtl适配方法链接:https://github.com/diego-gomez-olvera/RtlViewPager

  • 菜单栏的图标处理

图标处理:

方法一:图标做两套,放在不同的文件夹里,切换语言和阿拉伯语适配的时候,进行图标的变更;

方法二:图标保持不变,切换的时候,直接将图标右移,图标位置保持不变。

附:

插件:AndroidLocalizationer(实现语言国际化,支持30多种语言,可以实现词条strings.XML文件的转换。)

相关链接:https://blog.csdn.net/u012437660/article/details/79495537

文档还在完善中,欢迎大家提出问题,交流分享!

Android阿拉伯语UI适配问题汇总相关推荐

  1. Android 系统(226)---Android 阿拉伯语适配

    Android 阿拉伯语适配 RTL 语言由来 RTL 是 Right-to-left(从右向左) 的缩写.其意为人们书写阅读习惯是从右向左,朝左继续的,常见的 RTL 语言有阿拉伯语,希伯来语等. ...

  2. Unity阿拉伯语的适配(终极版)

    最近在做阿语的适配,发现网上并没有一套完整的方案,这次给大家带来一套完整的解决方案,并配上一套可扩展的代码,希望我们每个人以后再遇到阿拉伯语的适配的时候,可以使用这套终极解决方案来搞定.同时随着uni ...

  3. Android阿拉伯语混排

    文章目录 1.Android阿拉伯语混排显示关键类 BidiFormatter 1.示例一 测试一 测试二 测试三 测试三 测试四 测试五 2. 示例二 3. 示例三 4. 示例四 2.关于实现上面功 ...

  4. Android 阿拉伯语适配

    首先推荐一个链接:https://www.jianshu.com/p/d8cd294a5c31 开始进入正题 1.sdk要求: Android 4.2 即 SDK 17 2.四个重要属性: andro ...

  5. iOS 阿拉伯语 RTL适配

    阿拉伯语: 背景:阿拉伯语使用者占世界人口的6%,使用阿拉伯字母,为从右至左书写的文字,主要通行于18个阿拉伯国家及4个国际组织的官方语言.以阿拉伯语作为母语的人数超过2.6亿人.阿拉伯语在全球范围使 ...

  6. android 今日头条布局,Android今日头条UI适配完善版

    前言 众所周知 android的碎片化一直困扰着开发者,我们要花很多的时间去做UI适配的工作.主流的适配方案有两种 1.今日头条适配 2.smallestWidth适配.具体的实现点击上述连接查看. ...

  7. android 阿拉伯语下的光标,android – 在EditText中的游标提示不是从右边开始的阿拉伯语...

    我正在尝试使用提示文本制作EditText: 用英文"password"..光标正确设置在左侧. 但对于提示为"كلمهالمرور"的阿拉伯语,光标始终设置为 ...

  8. android 阿拉伯语下的光标,android – EditText中的双光标,用于输入类型编号/电话(RTL阿拉伯语)...

    我有一个EditText设置为重力右,所以如果语言是阿拉伯语,文本从右边开始. 注意:我的应用程序支持RTL,我没有为EditText设置TextDirection,因为它会遇到同样的问题.设置为Ri ...

  9. android 阿拉伯语符号,阿拉伯文符号

    阿拉伯语(العَرَبِيَّة‎ al-ʻarabīyah [alʕaraˈbijja] 或者 عربي/عربى‎ ʻarabī [ˈʕarabiː])是除了英语和法语之外最多国家使用的官方语言 ...

最新文章

  1. system函数阻塞_CompletableFuture:让你的代码免受阻塞之苦
  2. wsus问题之无法访问 WSUS 控制台
  3. 关于showmodaldialog的问题处理
  4. Haar、pico、npd、dlib等多种人脸检测特征及算法结果比较
  5. vue项目打包之后放在服务器上测试的时候访问不到本地json数据的解决方法
  6. android listview 开发,android开发之ListView实现
  7. redis源码剖析(十三)—— dump.rdb文件分析
  8. 网易《社会心理学》笔记(不定时更新)
  9. Linux安装caffe问题汇总
  10. could not find Fragment constructor
  11. LTP(Linux Test Project)学习(五)——LTP代码学习
  12. 《愤怒的小鸟》全系列游戏——这些都玩过,你就碉堡了~(版本一)
  13. iOS解决“The ‘Pods-XXX‘ target has transitive dependencies that include statically linked binaries”报错
  14. RISC-V要上天!NASA选它做下一代航天计算芯片
  15. t3怎么设置远程服务器,T1怎么配置才能让客户端远程登录上服务器呢?不借助任何第三方工具。...
  16. English Learning - L1-11 时态 + 情态动词 2023.1.9 周一
  17. 易创索讯-dede模板建站页面模板seo优化设置
  18. 最新!教育部发布2019全国高校名单(2956所)
  19. 会声会影X5/6/7无法注册解决(点击已经购买跳到购买网站)
  20. CentOS安装mysql 5.7.28

热门文章

  1. java下载微信支付账单_java微信支付,对账单下载
  2. mysql操作窗口如何设置粘贴_现在我在学习MySQL,问问怎么复制粘贴数据库
  3. excel 置信区间 计算_如何用excel计算95%的置信区间 | 在excle中如何进行区间估计...
  4. 你知道如何用 Git 来统计代码吗?
  5. vue rsa加密 php解密,【今日学习】VUE使用RSA加密技术
  6. 如何使用CSS和JavaScript构建简单的甘特图
  7. Qt处理传输协议数据时QByteArray添加多字节的使用案例
  8. WIN10环境下MAVEN的安装与配置
  9. P2V vCenter Converter Standalone迁移(问题记录)
  10. 有意义的人生与学习——跟随大师感悟人生