wake-up-neo.com

Text in einem Toast in Android zentrieren

Ich habe mich gefragt, ob es eine Möglichkeit gibt, den gesamten Text in einem Toast anzuzeigen, der zentriert werden soll. Zum Beispiel habe ich einen Toast mit 2 Textzeilen. Aus rein ästhetischen Gründen möchte ich, dass der Text zentriert statt linksbündig ist. Ich habe die Dokumentation durchgesehen und kann nichts darüber finden. Gibt es eine einfache Möglichkeit, die ich vermisst habe?

Danke Chris

47
Chris Robinson

Verwenden Sie die Funktion setView(view) des Toast, um eine View mit Gravity.CENTER bereitzustellen.

14
Sameer Segal

Angepasst von eine andere Antwort :

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

Toast basiert auf einer TextView und die Standardgravitation davon ist links ausgerichtet. So müssen Sie beispielsweise Ihre eigene TextView erstellen: 

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

Und Sie weisen dem Toast die TextView folgendermaßen zu: 

Toast t = new Toast(yourContext);
t.setView(yourNewTextView);
26
Sephy

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

Neben der Mitte gibt es noch andere Ausrichtungen.

Quelle

18
YetAnotherUser

Es ist ein dreckiger Hack, aber

((TextView)((LinearLayout)toast.getView()).getChildAt(0))
    .setGravity(Gravity.CENTER_HORIZONTAL);
18
Mikhail
Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
8
serj

Ich sage nicht, dass findViewById(Android.R.id.message) falsch ist, aber für den Fall, dass es (zukünftige?) Implementierungsunterschiede gibt, habe ich selbst einen etwas anderen Ansatz verwendet:

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

und dann:

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

Es ist Arbeit für mich:

Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER| Gravity.BOTTOM, 0, 20);
toast.show();
2
Kumar VL

In kotlin :

fun makeToast(context: Context, resId: Int) {
    val toast = Toast.makeText(context, resId, Toast.LENGTH_SHORT)
    val view = toast.view.findViewById<TextView>(Android.R.id.message)
    view?.let {
        view.gravity = Gravity.CENTER
    }
    toast.show()
}
0
vishnu benny

Diese Variante bezieht sich auf die Verwendung von 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();