Android
Pain grillé
Recherche…
Introduction
Un toast fournit des commentaires simples sur une opération dans une petite fenêtre contextuelle et disparaît automatiquement après un délai d'attente. Il ne remplit que la quantité d'espace requise pour le message et l'activité en cours reste visible et interactive.
Syntaxe
- Toast makeText (Contexte contextuel, texte CharSequence, durée int)
- Toast makeText (Contexte contextuel, int resId, int duration)
- void setGravity (int gravity, int xOffset, int yOffset)
- annuler le spectacle ()
Paramètres
Paramètre | Détails |
---|---|
le contexte | Le contexte d'affichage de votre Toast dans. this est couramment utilisé dans une activité et getActivity() est couramment utilisé dans un fragment. |
texte | Un CharSequence qui spécifie quel texte sera affiché dans le Toast. Tout objet qui implémente CharSequence peut être utilisé, y compris une chaîne |
resId | Un ID de ressource pouvant être utilisé pour fournir une chaîne de ressources à afficher dans le Toast |
durée | Drapeau entier représentant la durée d'affichage du Toast. Les options sont Toast.LENGTH_SHORT et Toast.LENGTH_LONG |
la gravité | Entier spécifiant la position ou "gravité" du pain grillé. Voir les options ici |
xOffset | Spécifie le décalage horizontal pour la position Toast |
yOffset | Spécifie le décalage vertical pour la position Toast |
Remarques
Un toast fournit des commentaires simples sur une opération dans une petite fenêtre contextuelle. Il ne remplit que la quantité d'espace requise pour le message et l'activité en cours reste visible et interactive.
SnackBar est une alternative plus récente à Toast. SnackBar offre un style visuel mis à jour et permet à l'utilisateur de supprimer le message ou de prendre des mesures supplémentaires. Voir la documentation SnackBar pour plus de détails.
Documentation officielle:
https://developer.android.com/reference/android/widget/Toast.html
Définir la position d'un pain grillé
Une notification de toast standard apparaît en bas de l'écran, alignée au centre horizontal. Vous pouvez changer cette position avec setGravity(int, int, int)
. Cela accepte trois paramètres: une constante de gravité, un décalage de la position x et un décalage de la position y.
Par exemple, si vous décidez que le toast doit apparaître dans le coin supérieur gauche, vous pouvez définir la gravité comme ceci:
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
Afficher un message de pain grillé
Dans Android, un Toast est un élément d'interface utilisateur simple qui peut être utilisé pour donner un retour contextuel à un utilisateur.
Pour afficher un simple message Toast, nous pouvons procéder comme suit.
// Declare the parameters to use for the Toast
Context context = getApplicationContext();
// in an Activity, you may also use "this"
// in a fragment, you can use getActivity()
CharSequence message = "I'm an Android Toast!";
int duration = Toast.LENGTH_LONG; // Toast.LENGTH_SHORT is the other option
// Create the Toast object, and show it!
Toast myToast = Toast.makeText(context, message, duration);
myToast.show();
Ou, pour afficher un toast en ligne, sans conserver l'objet Toast, vous pouvez:
Toast.makeText(context, "Ding! Your Toast is ready.", Toast.LENGTH_SHORT).show();
IMPORTANT: assurez-vous que la méthode show()
est appelée à partir du thread d'interface utilisateur. Si vous essayez d'afficher un Toast
partir d'un thread différent, vous pouvez par exemple utiliser la méthode runOnUiThread
d'une Activity
.
Ne pas le faire, c'est-à-dire essayer de modifier l'interface utilisateur en créant un Toast, lancera une RuntimeException
qui ressemblera à ceci:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
La manière la plus simple de gérer cette exception est d'utiliser simplement runOnUiThread: la syntaxe est indiquée ci-dessous.
runOnUiThread(new Runnable() {
@Override
public void run() {
// Your code here
}
});
Création d'un toast personnalisé
Si vous ne souhaitez pas utiliser la vue Toast par défaut, vous pouvez fournir la vôtre à l'aide de la setView(View)
sur un objet Toast
.
Tout d'abord, créez la disposition XML que vous souhaitez utiliser dans votre Toast.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
android:background="#111">
<TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"/>
<TextView android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"/>
</LinearLayout>
Ensuite, lors de la création de votre Toast, gonflez votre vue personnalisée à partir de XML et appelez setView
// Inflate the custom view from XML
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast_layout,
(ViewGroup) findViewById(R.id.toast_layout_root));
// Set the title and description TextViews from our custom layout
TextView title = (TextView) layout.findViewById(R.id.title);
title.setText("Toast Title");
TextView description = (TextView) layout.findViewById(R.id.description);
description.setText("Toast Description");
// Create and show the Toast object
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Fil de manière sécurisée pour afficher Toast (Application Wide)
public class MainApplication extends Application {
private static Context context; //application context
private Handler mainThreadHandler;
private Toast toast;
public Handler getMainThreadHandler() {
if (mainThreadHandler == null) {
mainThreadHandler = new Handler(Looper.getMainLooper());
}
return mainThreadHandler;
}
@Override public void onCreate() {
super.onCreate();
context = this;
}
public static MainApplication getApp(){
return (MainApplication) context;
}
/**
* Thread safe way of displaying toast.
* @param message
* @param duration
*/
public void showToast(final String message, final int duration) {
getMainThreadHandler().post(new Runnable() {
@Override
public void run() {
if (!TextUtils.isEmpty(message)) {
if (toast != null) {
toast.cancel(); //dismiss current toast if visible
toast.setText(message);
} else {
toast = Toast.makeText(App.this, message, duration);
}
toast.show();
}
}
});
}
N'oubliez pas d'ajouter MainApplication
au manifest
.
Appelez-le maintenant depuis n'importe quel thread pour afficher un message de toast.
MainApplication.getApp().showToast("Some message", Toast.LENGTH_LONG);
Afficher le message Toast ci-dessus
Par défaut, Android affichera les messages Toast en bas de l'écran même si le clavier est affiché. Cela affichera un message Toast juste au-dessus du clavier.
public void showMessage(final String message, final int length) {
View root = findViewById(android.R.id.content);
Toast toast = Toast.makeText(this, message, length);
int yOffset = Math.max(0, root.getHeight() - toast.getYOffset());
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, yOffset);
toast.show();
}
Un moyen sûr d'afficher un message Toast (pour AsyncTask)
Si vous ne souhaitez pas étendre l'application et garder vos messages de toast sécurisés, assurez-vous de les afficher dans la section post-exécution de vos AsyncTasks.
public class MyAsyncTask extends AsyncTask <Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// Do your background work here
}
@Override
protected void onPostExecute(Void aVoid) {
// Show toast messages here
Toast.makeText(context, "Ding! Your Toast is ready.", Toast.LENGTH_SHORT).show();
}
}