Поддержка RTL для вектора drawable Для ниже API 19


У меня есть vector рисование.

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
    <path
        android:fillColor="#65666a"
        android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z" />
</vector>

Я добавил атрибут android:autoMirrored="true" для поддержки RTL, но он используется только в API 19 и выше. Но мой минимальный уровень API-это API 17. Как я могу добавить обратную сопоставимость? Любая помощь будет оценена по достоинству.

2 3

2 ответа:

Вот как бы я это сделал, вместо того, чтобы использовать autoMirrored, Используйте этот обходной путь, чтобы сделать свой собственный "Автомир".

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <group
        android:pivotX="12"
        android:scaleX="@dimen/rtl_automirror_scale">
        <path
            android:fillColor="#65666a"
            android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z" />
    </group>
</vector>

Здесь я удалил атрибут autoMirror и вместо этого завернул путь вектора в тег <group> с точкой pivotX 12 (т. е. середина рисуемого) и scaleX, указывающие на ресурс Dimen.

В папке обычных значений вы бы предоставили ресурс в виде:

<resources>

    <item name="rtl_automirror_scale" format="float" type="dimen">1</item>

</resources>

Значение 1 для шкалы означает отсутствие изменений, только нормальное вытягиваемый.

Однако затем вы можете предоставить альтернативный ресурс значений для устройств RTL в values-ldrtl:

<resources>

    <item name="rtl_automirror_scale" format="float" type="dimen">-1</item>

</resources>

Значение -1 означает, что VectorDrawable будет переворачиваться по горизонтали для устройств RTL.

Затем, когда у вас есть другие VectorDrawables, которые нужно перевернуть, просто оберните их в групповой тег, как указано выше, указывая на тот же dimen.

В своем imageview я добавил

android:scaleX="@integer/local_mirror_scale_x"

Тогда в целых числах.xml в значениях

В английских целых числах

<integer name="local_mirror_scale_x">1</integer>

В арабских целых числах

<integer name="local_mirror_scale_x">-1</integer>