2010-08-19 14 views
42

Mi chiedevo se c'era un modo per visualizzare tutto il testo in un brindisi per essere centrato. Ad esempio, ho un brindisi che contiene 2 righe di testo. Per ragioni puramente estetiche, vorrei che il testo fosse allineato al centro anziché allineato a sinistra. Ho esaminato la documentazione e non riesco a trovare nulla a riguardo. C'è un modo semplice per farlo che mi è sfuggito?Centro testo in un brindisi in Android

Grazie Chris

risposta

13

Utilizzare la funzione del Toast setView(view) di fornire un View con Gravity.CENTER.

26

Toast è costruito su una TextView e la gravità di default è allineata a sinistra. Quindi, è necessario creare il proprio TextView come questo per esempio:

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical|center_horizontal" 
    android:text="all the text you want" 
/> 

E si assegna il TextView al brindisi in questo modo:

Toast t = new Toast(yourContext); 
t.setView(yourNewTextView); 
+1

Non c'è bisogno per il proprio punto di vista. Vedi risposta accettata. – erlando

18

E 'trucco sporco, ma

((TextView)((LinearLayout)toast.getView()).getChildAt(0)) 
    .setGravity(Gravity.CENTER_HORIZONTAL); 
+2

Ottimo! Assicurati di circondare con un fermo 'ClassCastException' per essere sicuro nel caso in cui la gerarchia delle viste di Toasts cambi in futuro. – mxcl

+3

Nota: provato questo e non ha funzionato su 4.0.2 – Rick

+0

Questo funziona sul mio Nexus 4. Suggerisco di farlo, avvolgendolo con un ClassCastException come detto in precedenza da Max Howell e poi convivendolo quando genera un'eccezione effettiva. –

8
Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT); 
toast.setGravity(Gravity.CENTER, 0, 0); 
toast.show(); 
+23

Ciò non centra il testo, ma lo stesso toast. –

69

Adattato da another answer:

Toast toast = Toast.makeText(this, "Centered\nmessage", Toast.LENGTH_SHORT); 
TextView v = (TextView) toast.getView().findViewById(android.R.id.message); 
if(v != null) v.setGravity(Gravity.CENTER); 
toast.show(); 
+4

Perché la gravità predefinita non è Gravity.CENTER? Silly Android! – User9527

4

Non Saing che findViewById(android.R.id.message) è sbagliato, ma solo nel caso in cui non ci sono (futuri?) Le differenze di implementazione Io stesso usato un po 'approccio differen:

void centerText(View view) { 
    if(view instanceof TextView){ 
     ((TextView) view).setGravity(Gravity.CENTER); 
    }else if(view instanceof ViewGroup){ 
     ViewGroup group = (ViewGroup) view; 
     int n = group.getChildCount(); 
     for(int i = 0; i<n; i++){ 
      centerText(group.getChildAt(i)); 
     } 
    } 
} 

e poi:

Toast t = Toast.makeText(context, msg,Toast.LENGTH_SHORT); 
centerText(t.getView()); 
t.show(); 
17

Senza the hack:

String text = "Some text"; 
Spannable centeredText = new SpannableString(text); 
centeredText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), 
      0, text.length() - 1, 
      Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

Toast.makeText(getActivity(), centeredText, Toast.LENGTH_LONG).show(); 

Ci sono anche altri allineamenti oltre al centro.

source

+0

ha funzionato come un fascino! Questo è esattamente ciò di cui avevo bisogno! – deeshank

0

Questa variazione è con l'utilizzo di LinearLayout. :)

Toast SampleToast = Toast.makeText(this, "This is the example of centered text.\nIt is multiline text.", Toast.LENGTH_SHORT); 
LinearLayout OurLayout = (LinearLayout) SampleToast.getView(); 

if (OurLayout.getChildCount() > 0) 
{ 
TextView SampleView = (TextView) OurLayout.getChildAt(0); 
SampleView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); 
} 

SampleToast.show(); 
+0

Questa è una soluzione hacky che potrebbe non funzionare nelle versioni future di Android, ad esempio se il primo figlio non è un TextView. Non segue gli standard di codifica Java. –

-3
Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG); 
t.setText("Password Does't match..."); 
t.setGravity(0, 0, 0); 
t.show(); 

semplice codice per toast più essere centro

+0

Benvenuti in SO.Si prega di consultare la [pagina di aiuto sulla risposta alle domande.] (Http://stackoverflow.com/help/how-to-answer). Come scritto, il tuo codice è scarsamente formattato e non contiene una spiegazione. –

+0

Ci scusiamo, ma il tuo codice imposta il centro di gravità sul pane tostato (appare sullo schermo centrale), non sul testo –

Problemi correlati