如何指定RTL特定的drawable

时间:2013-12-15 10:44:55

标签: android right-to-left

我的图像从右到左看起来不同。 是否可以为文件名创建rtl特定的可绘制目录或某些rtl后期修复以自动加载相关图像? 看起来ldrtl post-fix,从17 lvl添加,仅适用于layouts目录。

3 个答案:

答案 0 :(得分:38)

对于17+(4.2.x +),你可以使用布局方向( ld )资源限定符,从右到左(RTL)你可以使用 ldrtl 和左边在右边(LTR)你可以使用 ldltr ,例如你可以用

res/ drawable // Default drawable-ldltr // LTR drawable-ldrtl // RTL

与任何其他限定符一样,您可以将其与其他许多限定符结合使用,例如drawable-ldrtl-xhdpi,请注意 ldrtl 如何在 xhdpi 之前出现,否则aapt会抱怨。

正如@Dennis从19岁以上(4.4岁以上)提到的那样,你可以更轻松地使用autoMirrored

答案 1 :(得分:31)

回答这个问题已经很晚了,但我想分享一个我刚刚发现的方法。我将首先回顾其他人提到的内容。

让我们从规范开始。

我们需要构建类似的东西:

login --> take picture --> win prize

在RTL中,它将成为:

ezirp niw <-- erutcip ekat <-- nigol

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

Android&gt; = 19

正如其他人提到的,我们可以使用autoMirrored=true标志。 (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

请注意:

    {li} arrow_right.pngdrawable-*包含-->

说明: 唯一的缺点是它不向后兼容。

适用于Android&lt; 19,选项1

与其他人指出的一样,您可以使用ldrtl选项。 (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

请注意:

    {li} arrow_right.pngdrawable-*包含--> {li} arrow_right.pngdrawable-ldrtl-*包含<--

说明: 除了你需要准备10x资产文件之外,这种方法没有任何问题。所以它引导我找到下一个选项。

适用于Android&lt; 19,选项2

此选项将使用rotationY="180"属性。 (available from API11)

如果您将rotationY="180"设为ImageView-->将变为<--

所以我们可以做以下事情。

用法:

<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包含-->
  • values/integers包含 <integer name="angle_rtl_180">0</integer>
  • values-ldrtl/integers包含 <integer name="angle_rtl_180">180</integer>

备注:您只需要一组资产,此解决方案可以在API 11中使用,只需添加android:rotationY="@integer/angle_rtl_180"即可轻松使用。

希望它有所帮助!

答案 2 :(得分:8)

可以选择自动镜像drawable。检查autoMirrored属性。