2016-02-07 23 views
10

Voglio visualizzare un testo con una un'azione su design Support Library Bar in.
La mia lingua è scritta da destra a sinistra. Quindi, come posso cambiare il testo e la direzione dell'azione di SnackBar?
Qualcosa di simile a questo:

destra a sinistra Bar in

enter image description here

risposta

2

Infine dalle risposte e più ricerche ho trovato questa soluzione:

Snackbar snackbar = 
    Snackbar.make(view, "My right2left text", Snackbar.LENGTH_LONG) 
      .setAction("Action", new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
       } 
      }); 

Set direzione da destra a sinistra:

ViewCompat.setLayoutDirection(snackbar.getView(),ViewCompat.LAYOUT_DIRECTION_RTL); 

Non dimenticare questo per mostrare lo snack:

snackbar.show(); 

UPDATE

Poiché si dispone di Text e Action come TextView è possibile utilizzare gli altri metodi TextView per loro. come setTypeface(), setTextSize() e così via.

Set carattere per il testo:

TextView text = snackbar.getView().findViewById(android.support.design.R.id.snackbar_text); 
text.setTypeface(yourTypeface); 

Imposta carattere per l'azione:

TextView action = snackbar.getView().findViewById(android.support.design.R.id.snackbar_action); 
action.setTypeface(yourTypeface); 
+0

Utilizzare ViewCompat da android.support.v4.view.ViewCompat per Android inferiore a 17 Come in https://stackoverflow.com/questions/30463608/set-layoutdirection-rtl-for-api-lower-than-17/37670836 . –

2

è necessario impostare questo sulla base locale. Android supporta questa funzionalità.

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

In manifest di Android sotto il tag applicazione tenere presente

android:supportsRtl="true" 

defince un metodo come questo in classe Utils

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

Utilizzare questo repo come riferimento e implementare questo per snack

https://github.com/semsamot/ActionBarRTLizer.git

+0

Grazie, e che dire Livello API 17-? La mia app min sdk è 14. – Seyyed

+0

questa non è la migliore pratica. Un modo migliore per evitare che qualcosa di strano accada al linguaggio RTL Gli amanti dello sviluppo di app Android sono creare layout RTL personalizzati e gonfiarli su ogni dove attraverso l'app, ad es. la barra degli strumenti con layout RTL personalizzato offre prestazioni migliori in ciascuna API rispetto a Android RTL Support e impone che il layout sia RTL. quindi questa è la mia esperienza grazie lettore paziente – Setmax

2

Ho risolto questo pr oblem impostando il layout personalizzato per la disposizione degli snack in base a questa refrence.

customize snackBar's layout

3

basta aggiungere questo i codici:

In manifest di Android sotto il tag applicazione mantenere questo

android: supportsRtl = "true"

e questo:

Snackbar snackbar = Snackbar.make(getView(), "Text", Snackbar.LENGTH_SHORT); 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
    TextView view1 = (TextView)snackbar.getView().findViewById(android.support.design.R.id.snackbar_text); 
    view1.setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 
} 

snackbar.show(); 
+0

Ok, ma è utile mentre si desidera utilizzare la direzione RTL per la propria app. In alcuni casi si desidera utilizzare la direzione LTR per l'app e RTL per alcuni widget. – Seyyed

0
private void showSnackbar(String text, int Length, String Action, View.OnClickListener clickListener) { 
    Snackbar snackbar = Snackbar.make(findViewById(R.id.coordinatorLayout), text, Length); 
    View snack = snackbar.getView(); 
    snackbar.getView().setRotationY(180); 
    snack.setBackgroundColor(getResources().getColor(R.color.DarkBlue)); 
    TextView snack_text = (TextView)snack.findViewById(android.support.design.R.id.snackbar_text); 
    TextView snack_action = (TextView)snack.findViewById(android.support.design.R.id.snackbar_action); 
    snack_text.setTypeface(tf); 
    snack_action.setTypeface(tf); 
    snack_action.setRotationY(180); 
    snack_text.setRotationY(180); 
    snackbar.setAction(Action, clickListener); 
    snackbar.setActionTextColor(Color.parseColor("#00c4ff")); 
    snackbar.show(); 
} 
+0

Per favore spiega come e perché il tuo codice risolve il problema, perché le risposte al solo codice non sono apprezzate su StackOverflow. Inoltre, potresti spiegare perché la tua risposta supera le precedenti risposte precedenti (principalmente quella accettata). –

Problemi correlati