2015-08-26 14 views
19

Sto visualizzando uno snack bar con un messaggio di testo abbastanza lungo e al telefono in modalità verticale sembra a posto.Come impedire che il mio testo su snackbar venga troncato su Android?

Phone Portrait mode

Ma sulla tavoletta sembra consentire solo 1 riga di testo in modo da ottiene ellissi-ed

Tablet Landscape mode

C'è qualche cosa che può ottenere di essere a 2 righe in compresse paesaggio?

+3

come da progetto le linee guida snackbar non devono contenere molto testo, snack bar dovrebbe visualizzare una sola piccola linea di testo. https://www.google.com/design/spec/components/snackbars-toasts.html# una finestra di dialogo è più adatta qui – tyczj

risposta

23

È possibile fare riferimento TextView del Bar in questo modo:

TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); 

E poi operare sul TextView stessa modificandone le sue linee max:

tv.setMaxLines(3) 
+2

Impossibile ottenere il riferimento a TextView SnackBar. Ottengo NULL da quella dichiarazione. –

+1

@zulkarnainshah guarda la mia risposta - ho chiarito tutto lì –

3

Un esempio più elaborato e approfondito con il contesto sarebbe this:

// Create on click listener 
final OnClickListener positiveButtonClickListener = new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
    // Do your action - e.g. call GooglePlay to update app 
    openGooglePlayAppUpdate(); 
    } 
}; 

// Create snack bar instance 
Snackbar sBar = Snackbar.make(findViewById(R.id.some_view_to_bind), // You bind here e.g. layout, or form view 
           R.string.snack_bar_message, 
           Snackbar.LENGTH_INDEFINITE) 
         // Set text and action to the snack bar 
         .setAction(android.R.string.ok, positiveButtonClickListener); 

// Now get text view of your snack bar ... 
TextView snckBarTv = (TextView) offerUpdate.getView().findViewById(android.support.design.R.id.snackbar_text); 
snckBarTv.setMaxLines(5); // ... and set max lines 
sBar.show(); // and finally display snack bar ! 
7

Ciò che è importante e non dichiarato in altre risposte è che è necessario utilizzare la vista di Snackbar.

Quindi:

Snackbar snackbar = Snackbar.make(rootView, R.string.message, Snackbar.LENGTH_LONG); 
View snackbarView = snackbar.getView(); 
TextView snackTextView = (TextView) snackbarView 
.findViewById(android.support.design.R.id.snackbar_text); 
snackTextView.setMaxLines(2); 
snackbar.show(); 

Nota: questo può anche aiutare con i dispositivi con densità di schermo inferiore

Problemi correlati