An Android Toast is a small message displayed on the screen, similar to a tool tip or other similar popup notification. A Toast
is displayed on top of the main content of an activity, and only remains visible for a short time period. This screenshot shows how a Toast
looks like on the screen:
The
Toast
is shown at the bottom of the screen in the above screenshot (but you can change that).
Creating a Toast
Here is an Android Toast
example:
Toast toast = Toast.makeText(getApplicationContext(), "This is a message displayed in a Toast", Toast.LENGTH_SHORT); toast.show();
The Toast.makeText()
method is a factory method which creates a Toast
object. The method takes 3 parameters. First the methods needs a Context
object which is obtained by calling getApplicationContext()
. Note: The getApplicationContext()
method is a method that exists inside activities, so the above code has to be located in an Activity
subclass to work.
The second parameter is the text to be displayed in the Toast
. The third parameter is the time duration the Toast
is to be displayed. The Toast
class contains two predefined constants you can use: Toast.LENGTH_SHORT
and Toast.LENGTH_LONG
. You will have to experiment with these two values to see which fits your situation better.
Toast Positioning
You can change the positioning on the screen of a Toast
message using the setGravity()
method. Here is a Toast
setGravity()
example:
toast.setGravity(Gravity.CENTER, 0, 0);
The first parameter of the setGravity()
method specifies the overall position of the Toast
. You can use the following constants in the Gravity
class to specify the overall position:
TOP
BOTTOM
LEFT
RIGHT
CENTER
CENTER_HORIZONTAL
CENTER_VERTICAL
Each of these constants defines the position in either the X or Y direction, except for the CENTER
constant which implies centered both horizontally and vertically. You can combine these constants using the |
(or) operator, like this:
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTALLY, 0, 0);
The two other parameters of the setGravity()
method are an X and Y offset to the position defined by the Gravity
constant. If, for instance, you need the Toast
to be displayed at the top, centered horizontally, but 20 pixels down from the top position, you would use this setGravity()
call:
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTALLY, 0, 20);
Toast Custom Views
It is possible to define a custom View
for your Toast
. To do so, first you must create a layout XML file for the custom View
. Here is an example Toast
layout XML file:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toast_root_view" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_dark" android:padding="16dp" > <TextView android:id="@+id/toast_header" android:textSize="20dp" android:textColor="@android:color/primary_text_dark" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:id="@+id/toast_body" android:textColor="@android:color/primary_text_dark" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
Put this layout XML file into your Android project’s /app/src/main/res/layout
directory and name the file my_toast.xml
.
To use this layout XML file with a Toast
you write this code:
LayoutInflater inflater = getLayoutInflater(); View toastLayout = inflater.inflate(R.layout.my_toast, (ViewGroup) findViewById(R.id.toast_root_view)); TextView header = (TextView) toastLayout.findViewById(R.id.toast_header); header.setText("Message for you:"); TextView body = (TextView) toastLayout.findViewById(R.id.toast_body); body.setText("You have got mail!"); Toast toast = new Toast(getApplicationContext()); toast.setGravity(Gravity.CENTER, 0, 0); toast.setDuration(Toast.LENGTH_LONG); toast.setView(toastLayout); toast.show();
First you obtain the LayoutInflater
. You use that to inflate (create) the View
defined by your the layout XML file named my_toast.xml
(referred to by R.layout.my_toast
).
Notice the findViewById(R.id.toast_root_view)
call as the second parameter to the inflate()
method call. This finds the root ViewGroup
in the my_toast.xml
layout XML file (the root ViewGroup
has the id toast_view_group
). This call is necessary for the inflated View
to know what the root ViewGroup
inside the inflated View
is.
Once the View
is created, you obtain the two TextView
components from the View
and set their texts.
Finally, you create a Toast
object, set its gravity (position / alignment), its duration, its View
and then show it.
Here is how the Toast
above looks when displayed: