Поддержка 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 ответа:
Вот как бы я это сделал, вместо того, чтобы использовать
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.