RTL的实现
来源:互联网 发布:即时消息软件 编辑:程序博客网 时间:2024/05/17 01:30
好久没写博文了。
最近在忙RTL的事,网上搜了一下,貌似没翻墙看不到一些很好的博文。想写一下,今晚月色不错,适合写博文。。。
RTL 全称是 Right to Left。是 Android 支持从右往左念的语言,如阿拉伯语。支持的标记总的来说是:
1 在 AndroidManifest.xml 中 <application 标签中加入 supportRtl=”true”
2 在一些需要支持 RTL 的控件中(默认是不转的), 做 RTL 的标记,如 layout 相关的使用 layoutDirection=”locale”, TextView 等的使用textDirection=”locale”; locale 的意思是 控件的方向视当前语言而定。
3 将 xml 中 Left Right 改成 Start 和 End, 源码中 处理 Start 与 End 会判断当前语言是否 RTL,如果是 那么 Start 属性将是 Right, End 属性将是 Left。 如 paddingLeft 与 paddingStart
4 ldrtl ( layout-direction-right-to-left ): 举两个例子, layout-ldrtl:表示在当前语言为 RTL 语言时,该文件夹下的文件将会去覆盖 (overlay) 一下 layout 文件夹下的 xml 文件。这个在 RTL 与 LTR 的布局相差很大时很好用,只需将 LTR 的放置在 layout(默认读取)目录下,将 RTL 的放置在 layout-ldrtl 目录下。另一个例子: drawable-ldrtl 与上一个相同,即默认读取的是 drawable, 如果当前语言是 RTL 的,将看 drawable-ldrtl 后再看 drawable。
5 一般图片在 RTL 下与在 LTR 下的其实只是反转一下的问题,不应该又放同样内容方向互逆的图片在 drawable-ldrtl 中。这里有 mirror 属性,表示在 RTL 中自动镜像 对于 selector 有 autoMirrored=”true”,好像还有 mirrorForRtl 属性 (生活用的电脑木有代码,记性太差) 这种方法好处在于节省空间,无需复制一个图片放置在 drawable-ldrtl 中。
细节问题了:
1 popupwindow RTL 的方法:
在 popupwindow showAtLocation 方法中 gravity 属性, 默认是 Gravity.NO_GRAVITY, 而这个在源码中 表示 Gravity.LEFT | Gravity.TOP(左上角)。而 RTL 中 需要从右上角往左下角,所以需要将 gravity 设为 Gravity.RIGHT | Gravity.TOP
2 当你发现语言已经是阿拉伯语了, 上述的都设了,为什么有些控件还是 LTR 的格式,这个时候 尝试
Configuration config = getActivity().getResources().getConfiguration(); //这次居然为 falseconfig.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
这个的原因未明,只是有一次发现在阿拉伯语下 居然没反转,读了一下发现 context 是 LTR 的。再去获得一下 config.locale 发现已经是 fa-IR(伊朗)了,尝试:
config.setLayoutDirection(config.locale);
work 了。 自交大法好 = =
3 String.format 输出数字不正常:
这个主要是语言引起的。String.format 会调用到 String.format(Locale.getCurrent(), String format, args…); 由于是阿拉伯语,所以数字就被转了,要想阿拉伯数字在阿拉伯语下不转成阿拉伯语(有点绕 (-_-)可以
Locale en_US = new Locale("en_US");String.format(en_US, formatter, args);
- RTL的实现
- 串口的RTL实现原理分析
- 实现GridLayoutManager支持RTL
- android的RTL支持
- 基于对话框的MFC程序实现RTL风格的一种方式
- 行为级和RTL级的区别
- QuartusII下查看RTL原理图的方法
- freebsd的rtl无线网卡配置
- 从右往左的布局( RTL layout )
- GSM HACK的另一种方法:RTL-SDR
- 行为级和RTL级的区别
- 【RTL-SDR】用RTL-SDR实现航班追踪(ADS-B)
- [RTL综合]综合时保持RTL中直接写入的cell的层级
- FPGA入门笔记三 RTL schematic验证你的RTL级设计
- Android布局--相对布局,RTL,用代码实现布局
- 时序逻辑和组合逻辑的RTL的对照表
- gcc编译流程及中间表示层RTL的探索
- gcc编译流程及中间表示层RTL的探索
- 算法之6-回溯法解数独问题
- 使用boost的库链接问题generic_category()
- Jenkins权限配置失误后导致登录失败的解决办法
- C++类型转换
- HDU3240题解
- RTL的实现
- EF--ORM
- SharedPreferences保存数据
- EXT4磁盘组织 - EXT4文件系统分析 1
- [Leetcode]Bulb Switcher
- poj 1466 && hdu 1068Girls and Boys(最大独立集)
- 一些adb的口令
- 【Linux 驱动】netfilter/iptables (三) 注册和注销Netfilter hook
- 费氏查找算法