欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-06-19 13:06:30
Android阿拉伯语UI适配问题汇总Sensi SunRTL和LTRLTR是 Left-to-right(从左向右) 的缩写。(常用)RTL 是 Right-to-left(从右向左) 的缩写。其意为人们书写阅读习惯是从右向左,朝左继续的。常见的RTL语言有阿拉伯语,希伯来语等。对比如下:LTRRTL......

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

 

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

 

 

本文地址:https://blog.csdn.net/renus_sun/article/details/86639208