Comment changer la position de Toast dans Android?

Lorsque j’utilise Toast pour afficher un texte contextuel à l’écran, il affiche un peu le texte au-dessus du bas de l’écran, qui est la position par défaut.

Maintenant, je veux l’afficher au milieu de l’écran ou quelque part en fonction de mon choix.

Quelqu’un peut-il me guider comment y parvenir?

De la documentation ,

Positionnement de votre pain grillé

Une notification de toast standard apparaît en bas de l’écran, centrée horizontalement. Vous pouvez changer cette position avec la setGravity(int, int, int) . Cela accepte trois parameters: une constante de Gravity , un décalage de la x-position et un décalage de la y-position .

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

Si vous souhaitez déplacer la position vers la droite, augmentez la valeur du deuxième paramètre. Pour le décaler, augmentez la valeur du dernier paramètre.

En passant, si vous obtenez l’erreur indiquant que vous devez appeler makeText, le code suivant le fait fonctionner:

 Toast toast= Toast.makeText(getApplicationContext(), "Your ssortingng here", Toast.LENGTH_SHORT); toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0); toast.show(); 

Vous pouvez personnaliser l’emplacement de votre Toast en utilisant:

setGravity(int gravity, int xOffset, int yOffset)

docs

Cela vous permet d’être très précis sur l’emplacement de votre Toast.

L’une des choses les plus utiles concernant les parameters xOffset et yOffset est que vous pouvez les utiliser pour placer le Toast par rapport à une vue donnée.

Par exemple, si vous souhaitez créer un Toast personnalisé qui apparaît en haut d’un bouton, vous pouvez créer une fonction comme celle-ci:

 // v is the Button view that you want the Toast to appear above // and messageId is the id of your ssortingng resource for the message private void displayToastAboveButton(View v, int messageId) { int xOffset = 0; int yOffset = 0; Rect gvr = new Rect(); View parent = (View) v.getParent(); int parentHeight = parent.getHeight(); if (v.getGlobalVisibleRect(gvr)) { View root = v.getRootView(); int halfWidth = root.getRight() / 2; int halfHeight = root.getBottom() / 2; int parentCenterX = ((gvr.right - gvr.left) / 2) + gvr.left; int parentCenterY = ((gvr.bottom - gvr.top) / 2) + gvr.top; if (parentCenterY <= halfHeight) { yOffset = -(halfHeight - parentCenterY) - parentHeight; } else { yOffset = (parentCenterY - halfHeight) - parentHeight; } if (parentCenterX < halfWidth) { xOffset = -(halfWidth - parentCenterX); } if (parentCenterX >= halfWidth) { xOffset = parentCenterX - halfWidth; } } Toast toast = Toast.makeText(getActivity(), messageId, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, xOffset, yOffset); toast.show(); } 
 Toast mytoast= Toast.makeText(getApplicationContext(), "Toast Message", 1); mytoast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0); // for center horizontal //mytoast.setGravity(Gravity.CENTER_VERTICAL); // for center vertical //mytoast.setGravity(Gravity.TOP); // for top mytoast.show(); 

Le code ci-dessus vous aidera à afficher du pain grillé au milieu de l’écran ou selon votre choix pour que vous définissiez simplement la gravité du pain selon vos besoins.

Note: Pour ce processus, vous devez utiliser l’object de Toast

  Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); 

réglage des toasts à l’écran supérieur

 toast.setView(view); toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom toast.setDuration(Toast.LENGTH_LONG); toast.show(); 

maintenant en bas

  toast.setView(view); toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom toast.setDuration(Toast.LENGTH_LONG); toast.show(); 

de la même façon, nous pouvons définir le pain grillé à gauche, à droite et aussi au centre

Cliquez ici

La méthode pour changer la couleur, la position et la couleur de fond du toast est la suivante:

 Toast toast=Toast.makeText(getApplicationContext(),"This is advanced toast",Toast.LENGTH_LONG); toast.setGravity(Gravity.BOTTOM | Gravity.RIGHT,0,0); View view=toast.getView(); TextView view1=(TextView)view.findViewById(android.R.id.message); view1.setTextColor(Color.YELLOW); view.setBackgroundResource(R.color.colorPrimary); toast.show(); 

Pour une explication ligne par ligne: https://www.youtube.com/watch?v=5bzhGd1HZOc

// Une classe de toast personnalisée où vous pouvez afficher le toast personnalisé ou par défaut comme vous le souhaitez)

 public class ToastMessage { private Context context; private static ToastMessage instance; /** * @param context */ private ToastMessage(Context context) { this.context = context; } /** * @param context * @return */ public synchronized static ToastMessage getInstance(Context context) { if (instance == null) { instance = new ToastMessage(context); } return instance; } /** * @param message */ public void showLongMessage(Ssortingng message) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } /** * @param message */ public void showSmallMessage(Ssortingng message) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } /** * The Toast displayed via this method will display it for short period of time * * @param message */ public void showLongCustomToast(Ssortingng message) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast)); TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg); msgTv.setText(message); Toast toast = new Toast(context); toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0); toast.setDuration(Toast.LENGTH_LONG); toast.setView(layout); toast.show(); } /** * The toast displayed by this class will display it for long period of time * * @param message */ public void showSmallCustomToast(Ssortingng message) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast)); TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg); msgTv.setText(message); Toast toast = new Toast(context); toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0); toast.setDuration(Toast.LENGTH_SHORT); toast.setView(layout); toast.show(); } }