Centre de texte dans un toast dans Android

Je me demandais s'il y avait un moyen d'afficher tout le texte dans un toast pour être centré. Par exemple, j'ai un toast qui a 2 lignes de texte dedans. Pour des raisons purement esthétiques, je voudrais que le texte soit aligné au centre au lieu d'être aligné à gauche. J'ai regardé à travers la documentation et je ne trouve rien à ce sujet. Y a-t-il un moyen simple de le faire que j'ai manqué?

Merci Chris

46
demandé sur Chris Robinson 2010-08-19 17:03:22

11 réponses

Utilisez la fonction setView(view) du Toast pour fournir un View avec Gravity.CENTER.

14
répondu Sameer Segal 2016-02-03 21:03:22

Adapté à partir de une autre réponse:

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();
84
répondu Marc 2017-05-23 12:10:44

Toast est construit sur un TextView et la gravité par défaut de celui-ci est alignée à gauche. Donc, vous devez créer votre propre TextView comme ceci par exemple:

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

Et vous affectez le TextView au Toast comme ceci:

Toast t = new Toast(yourContext);
t.setView(yourNewTextView);
26
répondu Sephy 2010-08-19 13:28:19

, Il est sale hack, mais

((TextView)((LinearLayout)toast.getView()).getChildAt(0))
    .setGravity(Gravity.CENTER_HORIZONTAL);
18
répondu Mikhail 2011-05-01 08:35:02

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

Il y a aussi d'autres alignements en plus du centre.

Source

18
répondu YetAnotherUser 2017-05-23 11:54:59
Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
7
répondu serj 2011-05-07 15:10:24

Pas Saig que findViewById(android.R.id.message) est faux, mais juste au cas où il y en aurait (futur?) différences de mise en œuvre j'ai moi-même utilisé une approche peu différente:

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

Puis:

Toast t = Toast.makeText(context, msg,Toast.LENGTH_SHORT);
centerText(t.getView());
t.show();
4
répondu imbryk 2014-04-24 10:18:39

C'est du travail pour moi:

Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER| Gravity.BOTTOM, 0, 20);
toast.show();
1
répondu Kumar VL 2018-03-13 06:53:29

Cette variation est avec L'utilisation 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
répondu Muhamed Huseinbašić 2015-02-02 10:41:46

Dans 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
répondu vishnu benny 2018-06-06 06:20:09
Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG);
t.setText("Password Does't match...");
t.setGravity(0, 0, 0);
t.show();

Code Simple pour le toast plus être le centre de

-3
répondu Pintu Nandesariya 2016-02-03 23:00:59