web-dev-qa-db-fra.com

Comment changer la position de Toast dans Android?

Lorsque j'utilise Toast pour afficher un texte contextuel à l'écran, le texte affiché est légèrement au-dessus du bas de l'écran, ce qui correspond à 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?

258
UMAR

De la documentation ,

Positionner votre pain grillé

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

Par exemple, si vous décidez que le pain grillé 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 réduire, augmentez la valeur du dernier paramètre.

388
Pentium10

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 string here", Toast.LENGTH_SHORT);  
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
138
Rymnel

Vous pouvez personnaliser l'emplacement de votre pain grillé 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.

Une des choses les plus utiles sur les 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 pain grillé 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();       
}
14
JDJ
 Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG);
 toast.setGravity(Gravity.CENTER, 0, 0);
 toast.show();
11
nzala
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 pain grillé au milieu de l’écran ou selon votre choix pour régler la gravité du pain grillé en fonction de vos besoins.

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

7
user3652986

La méthode pour changer la couleur, la position et la couleur de fond du pain grillé 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

3
Mithun Adhikari

réglage du pain grillé à l'écran principal

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 des toasts à gauche, à droite et aussi au centre

Cliquez ici

2
Abhishek

// Une classe de pain grillé personnalisée dans laquelle vous pouvez afficher le pain grillé personnalisé ou par défaut à votre guise)

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

        }
0
Amardeep