2013-12-15 17 views
17

Ho poche immagini che sembrano diverse da destra a sinistra. È possibile creare una directory disegnabile specifica rtl o qualche rtl post-fix per i nomi di file per caricare automaticamente le immagini rilevanti? Sembra che ldrtl post-fix, aggiunto da 17 lvl, sia valido solo per la directory di layout.Come specificare i drawable specifici RTL

risposta

11

E 'piuttosto tardi per rispondere a questa domanda, ma voglio condividere un metodo che ho appena scoperto. Ricapitolerò prima quello che viene menzionato dagli altri.


Cominciamo con una specifica.

abbiamo bisogno di costruire qualcosa di simile:

login --> take picture --> win prize

In RTL, diventerà:

ezirp niw <-- erutcip ekat <-- nigol

Così la grande domanda è come si flip la freccia drawable, Chiamiamo it arrow_right.png: --> e in RTL si desidera che sia così: <--


Per Android> = 19

Come altri hanno detto, siamo in grado di utilizzare il flag autoMirrored=true.(available from API19)

l'utilizzo:

<ImageView ... 
    src="@drawable/arrow_right" 
    autoMirrored="true" />  

Le attività:

├── 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 

notare che:

  • arrow_right.png all'interno drawable-* contengono -->

Note: L'unico svantaggio è che non è compatibile con le versioni precedenti.


Per Android < 19, Opzione 1

Come altri hanno fatto notare, è possibile utilizzare l'opzione ldrtl. (doc: Providing Resources)

l'utilizzo:

<ImageView ... 
    src="@drawable/arrow_right" 
    autoMirrored="true" /> 

Le attività:

├── 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 

notare che:

  • arrow_right.png all'interno drawable-* contengono -->
  • arrow_right.png all'interno di drawable-ldrtl-* contiene <--.

Note: Non c'è niente di sbagliato in questo metodo, tranne che è necessario preparare come file di risorse 10x. Quindi mi porta a scoprire la prossima opzione.


Per Android < 19, l'opzione 2

Questa opzione prevede di utilizzare gli attributi rotationY="180". (available from API11)

Se si imposta rotationY="180" a ImageView, --> si trasformerà in <--.

Quindi possiamo fare qualcosa come il seguente.

L'utilizzo:

<ImageView ... 
    src="@drawable/arrow_right" 
    android:rotationY="@integer/angle_rtl_180" /> 

Le attività:

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 

Nota:

  • arrow_right.png contiene -->
  • values/integers contiene 012.372.951,779 mila
  • values-ldrtl/integers contiene <integer name="angle_rtl_180">180</integer>

Osservazioni: Hai solo bisogno di 1 set di beni, e questa soluzione può essere utilizzato da API 11, e l'utilizzo è abbastanza semplice con la semplice aggiunta android:rotationY="@integer/angle_rtl_180".

Spero che aiuti!

8

C'è un'opzione per il mirror automatico del drawable. Controlla l'attributo autoMirrored.

+0

Ho bisogno di supporto a nido d'ape, il mirror automatico è supportato solo a partire da 19 lvl. –

35

Per 17+ (4.2.x +) è possibile utilizzare la direzione di layout (ld) risorse di qualificazione, per la destra a sinistra (RTL) è possibile utilizzare ldrtl e da sinistra a destra (LTR) è possibile utilizzare ldltr, ad es è possibile utilizzare

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

anche come qualsiasi altro qualificatore si può combinare con molti altri per esempio drawable-ldrtl-xhdpi, si noti come ldrtl viene prima di xhdpi altrimenti aapt si lamenterà.

E come @Dennis citate da 19+ (4.4+) diventa più facile come si può utilizzare autoMirrored

+1

Che ne dici di drawable-fa? Sta funzionando. –

+0

Cosa è drawable-fa, @ Mr.Hyde? Non ho trovato nulla nei documenti. – lidkxx

+0

@lidkxx Niente. È stato un mio errore. 'fa' è per la lingua persiana ed è un linguaggio RTL. In quel momento intendevo come dovrei aggiungere questi 'ldltr' e' ldrtl' a una cartella che ha questo nome 'drawable-fa'. Ma ora ce l'ho; Basta creare 'drawable-ldrtl' per i layout sulla lingua persiana. –

Problemi correlati