如何在Android XML中自动镜像形状

4

我有一个自定义的类似卡片形状如下。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="?attr/colorListItemBackground" />

    <corners
        android:bottomLeftRadius="16dp"
        android:topLeftRadius="16dp" />

</shape>

我的应用程序还支持从右到左的语言,因此切换到从右到左后,这个形状不会改变(自动镜像)。

我可以做哪些更改来使它成为自动镜像?

请注意圆形附近的圆角。 LTR_Image

圆角仍然在同一位置。 RTL_Image


您的意思是您希望布局遵循RTL吗?如果是这样,您可以在此处查看实现:https://android-developers.googleblog.com/2013/03/native-rtl-support-in-android-42.html - Sumit Sahoo
我的布局已经遵循了RTL指南。所有的矢量可绘制对象和其他视图都是镜像的,但由于某种原因,这个自定义视图却不是。 - Mohammed Uzair
我已经添加了图片,请注意圆形附近的圆角。我希望在RTL布局中也能实现相同效果。 - Mohammed Uzair
好的,我明白了,请看我的回答。 - Sumit Sahoo
1个回答

6

您可以在内部定义自定义形状

res/
  drawable 
  drawable-ldltr 
  drawable-ldrtl 

现在将镜像定制形状放入 drawable-ldrtl 中,它应该可以正常工作。
您的自定义形状 xml 应完全相反,即镜像形式。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="?attr/colorListItemBackground" />

    <corners
        android:bottomRightRadius="16dp"
        android:topRightRadius="16dp" />

</shape>

你可以在矢量图上添加 android:autoMirrored="true" ,这将自动反转它。但是,按照文档要求,这需要你有一个矢量图像:https://developer.android.com/reference/android/graphics/drawable/VectorDrawable 因此,一种快捷方式是用矢量图包装你的形状。
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/your_shape"
        android:autoMirrored="true"/>

请告诉我这对您是否有效。


谢谢,那个方法有效了,但是我不能点赞因为我声望不够。然而,我想要这个作为自动镜像,根据你提到的情况,我必须将所有自定义drawable添加到RTL res文件夹中。此外,我有一些动画,现在我必须在res中添加另一个文件夹anim-ldrtl,并将所有反向动画添加到其中。当我有多个视图和自定义动画时,这会变得非常庞大。是否有其他自动方式,例如矢量可绘制对象? - Mohammed Uzair
1
不,形状中没有autoMirrored这个属性。它存在于矢量图的父级中。 - Mohammed Uzair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接