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
risposta
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);
è 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
Grazie, e che dire Livello API 17-? La mia app min sdk è 14. – Seyyed
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
Ho risolto questo pr oblem impostando il layout personalizzato per la disposizione degli snack in base a questa refrence.
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();
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
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();
}
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). –
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 . –