I was wondering if there was a way to display all text in a Toast
to be centered. For instance, I have a Toast
that has 2 lines of text in it. For purely aesthetic reasons, I would like the text to center-aligned instead of left-aligned. I've looked through the documentation and can't find anything about it. Is there a simple way to do this that I have missed?
Asked
Active
Viewed 4.9k times
70
11 Answers
112
Adapted from 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();
-
9Why the default gravity is not Gravity.CENTER? Silly android! – DàChún Apr 08 '16 at 07:51
-
2I don't know why but I have failed this method on Android 11 (API-30). – hata Oct 31 '21 at 09:03
-
I haven't worked with Android for years, it's possible that Google disabled this possibility? – Marc Nov 01 '21 at 10:12
28
Toast is built on a TextView and the default gravity of it is left aligned. So, you need to create your own TextView like this for instance :
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
android:text="all the text you want"
/>
And you assign the TextView to the Toast like this :
Toast t = new Toast(yourContext);
t.setView(yourNewTextView);

Sephy
- 50,022
- 30
- 123
- 131
27
Without the 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();
There are also another alignments besides center.

hata
- 11,633
- 6
- 46
- 69

YetAnotherUser
- 527
- 5
- 12
19
It is dirty hack, but
((TextView)((LinearLayout)toast.getView()).getChildAt(0))
.setGravity(Gravity.CENTER_HORIZONTAL);

Mikhail
- 568
- 1
- 6
- 22
-
2Great! Make sure you surround with a `ClassCastException` catch to be safe in case the view hierarchy of Toasts changes in the future. – mxcl Feb 27 '12 at 19:20
-
This works on my Nexus 4. I suggest doing this, wrapping it with a ClassCastException as Max Howell said above and then live with it when it throws an actual exception. – Johan S Mar 23 '13 at 09:17
-
2use findViewById(android.R.id.message) on the view returned by toast.getView() to ensure working code on all versions – erlando Oct 21 '13 at 12:02
15
Use the Toast's setView(view)
function to supply a View
with Gravity.CENTER
.

Richard Erickson
- 2,568
- 8
- 26
- 39

Sameer Segal
- 21,813
- 7
- 42
- 56
13
Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();

serj
- 373
- 2
- 4
5
Not saing that findViewById(android.R.id.message)
is wrong, but just in case there are (future?) implementation differences I myself used a bit differen approach:
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));
}
}
}
and then:
Toast t = Toast.makeText(context, msg,Toast.LENGTH_SHORT);
centerText(t.getView());
t.show();

imbryk
- 1,778
- 1
- 16
- 19
3
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()
}

vishnu benny
- 998
- 1
- 11
- 15
1
It is work for me:
Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER| Gravity.BOTTOM, 0, 20);
toast.show();

Kumar VL
- 45
- 4
0
This variation is with using LinearLayout
in your layout xml :)
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();

Aldan
- 674
- 9
- 23

Muhamed Huseinbašić
- 552
- 2
- 7
- 25
-
This is a hacky solution that might not work in future versions of android, for example if the first child is not a TextView. Does not follow Java coding standards. – Leandro Glossman Nov 16 '15 at 19:30
-3
Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG);
t.setText("Password Does't match...");
t.setGravity(0, 0, 0);
t.show();
simple code for toast most be center

Raiv
- 5,731
- 1
- 33
- 51
-
Welcome to SO. Please look through the [help page on answering questions.](http://stackoverflow.com/help/how-to-answer). As written, your code is poorly formatted and does not contain an explanation. – Richard Erickson Feb 03 '16 at 20:01
-
Sorry, but your code set gravity center to the toast (it appear in center screen), not to the text – Leonardo Sapuy Apr 20 '16 at 17:11