如何指定RTL特定的drawable

Vit*_*y A 31 android right-to-left

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

eve*_*otc 39

对于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


I'm*_*gon 37

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


让我们从规范开始.

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

login --> take picture --> win prize

在RTL中,它将成为:

ezirp niw <-- erutcip ekat <-- nigol

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


对于Android> = 19

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

用法:

<ImageView ...
    src="@drawable/arrow_right"
    autoMirrored="true" />    
Run Code Online (Sandbox Code Playgroud)

资产:

   ??? 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
Run Code Online (Sandbox Code Playgroud)

注意:

  • arrow_right.png里面drawable-*包含-->

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


对于Android <19,选项1

像其他人指出的那样,你可以使用该ldrtl选项.(doc:提供资源)

用法:

<ImageView ...
    src="@drawable/arrow_right" />
Run Code Online (Sandbox Code Playgroud)

资产:

   ??? 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
Run Code Online (Sandbox Code Playgroud)

注意:

  • arrow_right.png里面drawable-*包含-->
  • arrow_right.png里面drawable-ldrtl-*包含<--.

备注:此方法没有任何问题,除非您需要准备10x资产文件.所以它引导我找到下一个选项.


对于Android <19,选项2

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

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

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

用法:

<ImageView ...
    src="@drawable/arrow_right"
    android:rotationY="@integer/angle_rtl_180" />
Run Code Online (Sandbox Code Playgroud)

资产:

  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
Run Code Online (Sandbox Code Playgroud)

注意:

  • 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".

希望能帮助到你!

  • 我尝试了解决方案 For Android &gt;=19 for ImageView 但它对我不起作用 (2认同)

Den*_*nis 8

有一个自动镜像drawable的选项.检查autoMirrored属性.