如何指定RTL特定的可绘制对象 [英] How to specify RTL specific drawables

查看:205
本文介绍了如何指定RTL特定的可绘制对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我几乎没有从右到左看起来不同的图像.是否可以为文件名创建rtl特定的可绘制目录或某个rtl后缀,以自动加载相关图像?看起来像ldrtl后缀,是从17 lvl添加的,仅对布局目录有用.

I have few images that looks different on right-to-left. Is it possible to create rtl specific drawable directory or some rtl post-fix for file names to auto-load relevant images? Looks like ldrtl post-fix, added from 17 lvl, is good only for layouts directory.

推荐答案

回答这个问题还为时已晚,但是我想分享一个我刚刚发现的方法.我将首先回顾一下其他人提到的内容.

It's pretty late to answer this question, but I want to share a method that I just found out. I will first recap what is mentioned by the others.

让我们从规范开始.

我们需要构建如下内容:

We need to build something like:

登录->拍照->赢奖

在RTL中,它将变为:

In RTL, it will become:

ezirp niw<-erutcip ekat<-nigol

所以最大的问题是我们如何翻转可绘制箭头,我们将其称为 arrow_right.png :->在RTL中,您希望它像这样:<-

So the big question is how we flip the drawable arrow, let's call it arrow_right.png: --> and in RTL you want it to be like this: <--

对于 Android> = 19

正如其他人提到的,我们可以使用 autoMirrored = true 标志.(可从API19获得)

As others mentioned, we can use the autoMirrored=true flag. (available from API19)

用法:

<ImageView ...
    src="@drawable/arrow_right"
    autoMirrored="true" />    

资产:

   ├── drawable-xxxhdpi
        └── arrow_right.png
   ├── drawable-xxhdpi
        └── arrow_right.png
   ├── drawable-xhdpi
        └── arrow_right.png
   ├── drawable-hdpi
        └── arrow_right.png
   ├── drawable-mdpi
        └── arrow_right.png

请注意:

    drawable-* 内的
  • arrow_right.png 包含->
  • arrow_right.png inside drawable-* contain -->

备注:唯一的缺点是它不向后兼容.

Remarks: The only downside is that it's not backward compatible.

对于Android< 19,选项1

就像其他人指出的那样,您可以使用 ldrtl 选项.(文档:提供资源)

Like others have pointed out, you can use the ldrtl option. (doc: Providing Resources)

用法:

<ImageView ...
    src="@drawable/arrow_right" />

资产:

   ├── drawable-xxxhdpi
        └── arrow_right.png
   ├── drawable-xxhdpi
        └── arrow_right.png
   ├── drawable-xhdpi
        └── arrow_right.png
   ├── drawable-hdpi
        └── arrow_right.png
   ├── drawable-mdpi
        └── arrow_right.png
   ├── drawable-ldrtl-xxxhdpi
        └── arrow_right.png
   ├── drawable-ldrtl-xxhdpi
        └── arrow_right.png
   ├── drawable-ldrtl-xhdpi
        └── arrow_right.png
   ├── drawable-ldrtl-hdpi
        └── arrow_right.png
   ├── drawable-ldrtl-mdpi
        └── arrow_right.png

请注意:

    drawable-* 内的
  • arrow_right.png 包含->
  • drawable-ldrtl-* 内的
  • arrow_right.png 包含<-.
  • arrow_right.png inside drawable-* contain -->
  • arrow_right.png inside drawable-ldrtl-* contain <--.

备注:这种方法没有什么问题,除了您需要准备10倍的资产文件.因此,它使我找到了下一个选择.

Remarks: There is nothing wrong with this method, except you need to prepare like 10x assets files. So it leads me to find out the next option.

对于Android< 19,选项2

此选项将使用 rotationY ="180" 属性.(可从API11获得)

如果将 rotationY ="180" 设置为 ImageView ,则-> 将变成<-.

If you set rotationY="180" to ImageView, --> will turn into <--.

所以我们可以做类似以下的事情.

So we can do something like the following.

用法:

<ImageView ...
    src="@drawable/arrow_right"
    android:rotationY="@integer/angle_rtl_180" />

资产:

  drawable
   ├── drawable-xxxhdpi
        └── arrow_right.png
   ├── drawable-xxhdpi
        └── arrow_right.png
   ├── drawable-xhdpi
        └── arrow_right.png
   ├── drawable-hdpi
        └── arrow_right.png
   ├── drawable-mdpi
        └── arrow_right.png
   ├── values
        └── integers.xml
   ├── values-ldrtl
        └── integers.xml

注意:

  • arrow_right.png 包含->
  • 值/整数包含< integer name ="angle_rtl_180"> 0</integer>
  • values-ldrtl/integers 包含< integer name ="angle_rtl_180"> 180</integer>
  • arrow_right.png contains -->
  • values/integers contains <integer name="angle_rtl_180">0</integer>
  • values-ldrtl/integers contains <integer name="angle_rtl_180">180</integer>

备注:您只需要一组资产,并且可以从API 11使用此解决方案,并且只需添加 android:rotationY ="@ integer/angle_rtl_180" 即可使用,此方法非常简单.

Remarks: You only need 1 set of assets, and this solution can be used from API 11, and the usage is simple enough by simply adding android:rotationY="@integer/angle_rtl_180".

希望有帮助!

这篇关于如何指定RTL特定的可绘制对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆