2010-08-19 6 views
42

Me preguntaba si había una manera de mostrar todo el texto en un brindis para centrar. Por ejemplo, tengo un brindis que tiene 2 líneas de texto. Por razones puramente estéticas, me gustaría que el texto se alinee en el centro en lugar de alineado a la izquierda. Revisé la documentación y no puedo encontrar nada al respecto. ¿Hay una manera simple de hacer esto que me he perdido?Centro de texto en un brindis en Android

Gracias Chris

Respuesta

13

Utilice la función de la tostada setView(view) para suministrar una View con Gravity.CENTER.

26

Toast se basa en un TextView y la gravedad por defecto está alineada a la izquierda. Por lo tanto, es necesario crear su propia TextView como este por ejemplo:

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

Y se asigna el TextView a la tostada así:

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

No hay necesidad para su propio punto de vista. Ver respuesta aceptada – erlando

18

Es truco sucio, pero

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

¡Genial! Asegúrese de rodear con una captura 'ClassCastException' para estar seguro en caso de que la jerarquía de vistas de Toasts cambie en el futuro. – mxcl

+3

Nota: intenté esto y no funcionó en 4.0.2 – Rick

+0

Esto funciona en mi Nexus 4. Sugiero hacer esto, envolverlo con una excepción ClassCastException como Max Howell dijo anteriormente y luego vivir con él cuando arroja una excepción real. –

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

Esto no centra el texto, sino el propio toast. –

69

Adaptado de 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

¿Por qué la gravedad predeterminada no es Gravity.CENTER? Silly android! – User9527

4

No saing que findViewById(android.R.id.message) está mal, pero por si acaso existen (futuros?) Diferencias de implementación Yo mismo utilizó un enfoque diferen bits:

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)); 
     } 
    } 
} 

y luego:

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

Sin los hacks:

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(); 

También hay otras alineaciones además del centro.

source

+0

funcionó como un encanto! Esto es exactamente lo que necesitaba! – deeshank

0

Esta variación es con el uso de 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

Esta es una solución hacky que podría no funcionar en futuras versiones de Android, por ejemplo, si el primer hijo no es un TextView. No sigue los estándares de codificación Java. –

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

código simple para la tostada mayor sea el centro

+0

Bienvenido a SO.Consulte la [página de ayuda para responder preguntas.] (Http://stackoverflow.com/help/how-to-answer). Tal como está escrito, su código está mal formateado y no contiene una explicación. –

+0

Lo siento, pero su código establece el centro de gravedad en la tostada (aparece en la pantalla central), no en el texto –

Cuestiones relacionadas