Как указать RTL конкретные чертежи

У меня есть несколько изображений, которые выглядят по-другому справа налево. Возможно ли создать rtl конкретный ресурсный каталог или некоторое исправление rtl для имен файлов для автоматической загрузки соответствующих изображений? Похоже, ldrtl post-fix, добавленный из 17 lvl, хорош только для каталога макетов.

Ответы

Ответ 1

Это довольно поздно, чтобы ответить на этот вопрос, но я хочу поделиться методом, который я только что узнал. Сначала я расскажу о том, что упоминается другими.


Начните с спецификации.

Нам нужно построить что-то вроде:

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" />    

Активы:

   ├── 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 < 19, Option 1

Как указывали другие, вы можете использовать опцию ldrtl. (doc: Предоставление ресурсов)

Использование:

<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
   ├── 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-* содержат -->
  • arrow_right.png внутри drawable-ldrtl-* содержат <--.

Примечание: В этом методе нет ничего плохого, за исключением того, что вам нужно подготовить файлы 10x активов. Поэтому он приводит меня к следующему варианту.


Для Android < 19, Option 2

Этот параметр будет использовать атрибуты rotationY="180". (доступно из 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

Для 17+ (4.2.x +) вы можете использовать спецификатор ресурсов (ld), справа налево (RTL) вы можете использовать ldrtl и для левой вправо (LTR) вы можете использовать ldltr, например вы можете использовать

res/ drawable // Default drawable-ldltr // LTR drawable-ldrtl // RTL

Также как и любой другой классификатор, вы можете объединить его со многими другими, например. drawable-ldrtl-xhdpi, обратите внимание, как ldrtl появляется перед xhdpi, иначе апат будет жаловаться.

И как @Dennis упоминается в 19+ (4.4+), он становится проще, поскольку вы можете использовать autoMirrored

Ответ 3

Имеется возможность автоматического зеркалирования. Отметьте autoMirrored атрибут.