2013-07-07 5 views
14

Sto creando un'app per Android per una lingua specifica da destra a sinistra. E sto usando ActionBarSherlock (una libreria di action bar Android compatibile).
La cosa che voglio esattamente è come cambiare la direzione della barra delle azioni in RTL anche se l'utente non imposta le impostazioni internazionali predefinite in una lingua RTL.
Se qualcuno ha un'idea anche per Android Bar azione standard è prezioso e può aiutare per favore condividerlo.
Graziecambia la direzione della barra delle azioni da destra a sinistra

+0

hai trovato la soluzione? –

+0

Non ho trovato una buona soluzione, ma non ho ancora testato la soluzione di "semsamot" su "RTLizer". Se l'hai provato, parlami di questo. Grazie. – Aliaaa

risposta

1

Sono abbastanza sicuro che non sarai in grado di fare quello che stai chiedendo. Il pattern ActionBar è molto specifico e le librerie che lo supportano supportano solo il pattern definito (che ha l'icona in alto a sinistra, quindi il titolo del layout e i pulsanti di azione a destra).

Cambiare il test è semplice come cambiare le impostazioni internazionali e il testo all'interno della tua app (come hai già accennato).

La modifica della posizione degli elementi all'interno di ActionBar non sarà supportata dalle librerie che supportano il modello ActionBar standard, in quanto ciò che descrivi non è un modello di interfaccia utente supportato.

Penso che dovresti lasciare l'AB così com'è. Non è necessario cambiare l'ordine, in quanto non esiste comunque un orientamento da destra a sinistra, e cambiarlo sarà estremamente fastidioso per gli utenti.

In conclusione, non sarà possibile farlo con le librerie esistenti e probabilmente non lo si dovrebbe comunque.

+0

Ma altri hanno reso abbastanza bene dare un'occhiata a questo: https://play.google.com/store/apps/details?id=com.hamrahyar.nabzebazaar – Aliaaa

+0

La mia ipotesi è che hanno usato un layout personalizzato per creare questo elemento stesso. Penso che l'implementazione nativa (o ActionBarSherlock) non supporti questo in questo momento (vedremo se qualcuno ha una risposta diversa). – Booger

+0

@Booger È possibile ora! (vedi la mia risposta) – semsamot

52

Da livello API Android 17+ supporta RTL in modo nativo. Per forzare l'intero layout a essere RTL incluso ActionBar, procedi come segue.

Modificare l'AndroidManifest.xml e aggiungere android:supportsRtl="true" al tag <application> e quindi aggiungere la seguente riga alla parte superiore del onCreate vostre attività() metodo forceRTLIfSupported(); e quindi inserire la funzione di follow nella vostra attività.

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 
private void forceRTLIfSupported() 
{ 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ 
     getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 
    } 
} 

Ovviamente è utile solo per il debug. Utilizzare View.LAYOUT_DIRECTION_LOCALE per le build di produzione in modo che il layout venga modificato solo quando l'ubicazione/lingua del sistema scelta dall'utente, ovvero la locale, supporta RTL.

Spero che questo aiuti.

+1

grazie per la risposta. tuttavia ho bisogno di una risposta per il supporto della compatibilità per versioni di sdk inferiori se esiste una risposta! – Aliaaa

+0

Grazie. Molto buono. –

+1

sfortunatamente è RTL tutto layout. Voglio solo cambiare la direzione della barra delle azioni non tutte le applicazioni. che cosa posso fare? – Kenji

2

Booger ha ragione. L'app "Nabz Bazar" che hai menzionato non è allineata a destra su ogni versione di Android. Come potete vedere, l'ABS here non fa nulla su Android 4.0 o più recenti e gli screenshot di quell'app sono su un androide 4.2.

5

dobbiamo credere un potente regola in programmazione:

Tutto sarà possibile quando si sa i vostri strumenti.

Quindi, da ora è possibile utilizzare questa libreria per veramente RTLize tuoi actionbars: https://github.com/semsamot/ActionBarRTLizer

E, naturalmente, è compatibile con API Livello 7+.

+0

* Impossibile risolvere il simbolo 'ActionBarRtlizer' * (penso che ti sia dimenticato di menzionare cosa dovremmo importare per risolvere il problema) –

0

uso questo, Sarà fare della struttura da RTL, ma questo genitore root del vostro xml

android:layoutDirection="rtl" 
    android:textDirection="rtl"