我的图像从右到左看起来不同。 是否可以为文件名创建rtl特定的可绘制目录或某些rtl后期修复以自动加载相关图像? 看起来ldrtl post-fix,从17 lvl添加,仅适用于layouts目录。
答案 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
请注意:
arrow_right.png
内drawable-*
包含-->
说明: 唯一的缺点是它不向后兼容。
适用于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
请注意:
arrow_right.png
内drawable-*
包含-->
{li} arrow_right.png
内drawable-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属性。