Comment changer la position de Toast dans Android?

279

Lorsque j'utilise Toastpour afficher du texte contextuel à l'écran, il affiche le texte un peu 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 selon mon choix.

Quelqu'un peut-il me guider pour y parvenir?

UMAR
la source

Réponses:

410

De la documentation ,

Positionner votre toast

Une notification de toast standard apparaît près du bas de l'écran, centrée horizontalement. Vous pouvez modifier cette position avec la setGravity(int, int, int)méthode. Cela accepte trois paramètres: une Gravityconstante, un x-positiondécalage et un y-positiondécalage.

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 suit:

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 pousser vers le bas, augmentez la valeur du dernier paramètre.

Pentium10
la source
11
quelles sont les valeurs entières là-bas? Sont-ils dpi? ou quel est le max?
clifgray
9
Peut-être souligner l'évidence, mais Gravity.CENTER_VERTICALmettra le toast au milieu de l'écran.
Felix
3
Les décalages x et y sont en pixels, donc le maximum est votre largeur / hauteur d'affichage.
blueward
2
@ Pentium10 Les documents indiquent que les décalages sont en pixels. Dois-je supposer qu'il s'agit d'unités "px", par opposition à des unités "dp"?
batbrat
Mes messages de toast sur ma nouvelle galaxie s6 s'affichent dans 2 positions différentes. d'abord dans le centre horizontal gauche vertical puis descend vers le centre horizontal, vertical bas. cet effet ne se produit sur aucun de mes anciens appareils de test. J'affiche chaque message deux fois de suite, car tout
appui sur l'
150

Si vous obtenez une erreur indiquant que vous devez appeler makeText, le code suivant le corrigera:

Toast toast= Toast.makeText(getApplicationContext(), 
"Your string here", Toast.LENGTH_SHORT);  
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
Rymnel
la source
1
makeText renvoie un objet Toast, vous pouvez donc simplement ajouter .addGravity et .show après le makeText.
NikkyD
1
"si vous obtenez l'erreur indiquant que vous devez appeler makeText" - quand l'erreur apparaîtra-t-elle?
Jacek Laskowski
1
L'erreur se produit si vous utilisez le constructeur au new Toast(context)lieu deToast.makeText(...)
bleu pendant
16

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'endroit où vous souhaitez que l'emplacement de votre toast soit.

L'une des choses les plus utiles à propos des paramètres xOffset et yOffset est que vous pouvez les utiliser pour placer le Toast par rapport à une certaine vue.

Par exemple, si vous souhaitez créer un Toast personnalisé qui apparaît au-dessus 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 string 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();       
}
JDJ
la source
2
Cette réponse stackoverflow.com/a/21026866/630833 , prend en compte la taille de Toast, ce qui m'a été utile.
jayeffkay
Ceci est un excellent exemple. Merci.
wonsuc
11
 Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG);
 toast.setGravity(Gravity.CENTER, 0, 0);
 toast.show();
nzala
la source
7
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 le toast au milieu de l'écran ou selon votre choix pour cela, il suffit de régler la gravité du toast en fonction de votre besoin

Remarque: Pour ce processus, vous devez utiliser l'objet de Toast

user3652986
la source
3

La méthode pour changer la couleur, la position et la couleur d'arrière-plan du pain grillé est:

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

Mithun Adhikari
la source
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change.
greg-449
2

définition de pain grillé sur 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 manière, nous pouvons mettre un toast à gauche, à droite et aussi au centre

Cliquez ici

Abhishek
la source
0

// Une classe de toasts personnalisés où vous pouvez afficher des toasts personnalisés 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(String message) {
                Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
            }

            /**
             * @param message
             */
            public void showSmallMessage(String 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(String 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(String 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();
            }

        }
Amardeep
la source