Wie ändere ich die Position von Toast in Android?


279

Wenn ich ToastPopup-Text auf dem Bildschirm anzeige, wird der Text etwas über dem unteren Bildschirmrand angezeigt. Dies ist die Standardposition.

Jetzt möchte ich es in der Mitte des Bildschirms oder irgendwo nach meiner Wahl anzeigen.

Kann mir jemand zeigen, wie ich das erreichen kann?

Antworten:


410

Aus der Dokumentation ,

Positionieren Sie Ihren Toast

Eine Standard-Toastbenachrichtigung wird am unteren Rand des Bildschirms angezeigt und horizontal zentriert. Sie können diese Position mit der setGravity(int, int, int)Methode ändern . Dies akzeptiert drei Parameter: eine GravityKonstante, einen x-positionVersatz und einen y-positionVersatz.

Wenn Sie beispielsweise festlegen, dass der Toast in der oberen linken Ecke angezeigt werden soll, können Sie die Schwerkraft wie folgt einstellen:

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);

Wenn Sie die Position nach rechts verschieben möchten, erhöhen Sie den Wert des zweiten Parameters. Erhöhen Sie den Wert des letzten Parameters, um ihn nach unten zu verschieben.


11
Was sind die ganzzahligen Werte dort? Sind sie dpi? oder was ist das max?
Clifgray

9
Könnte auf das Offensichtliche hinweisen, Gravity.CENTER_VERTICALwird aber den Toast in die Mitte des Bildschirms stellen.
Felix

3
x- und y-Versatz sind in Pixel angegeben, daher ist das Maximum Ihre Anzeigebreite / -höhe.
Bluewhile

2
@ Pentium10 Die Dokumente geben an, dass die Offsets in Pixel angegeben sind. Sollte ich annehmen, dass dies "px" -Einheiten sind, im Gegensatz zu "dp" -Einheiten?
Batbrat

Meine Toastnachrichten auf meiner neuen Galaxy S6 werden in 2 verschiedenen Positionen angezeigt. zuerst in der linken horizontalen Mitte vertikal und dann nach unten in die Mitte horizontal, unten vertikal. Dieser Effekt tritt bei keinem meiner älteren Testgeräte auf. Ich zeige jede Nachricht zweimal hintereinander an, da alle Bildschirmtipps den ersten Toast sofort töten.
Androidcoder

150

Wenn Sie eine Fehlermeldung erhalten, dass Sie makeText aufrufen müssen, wird dies durch den folgenden Code behoben:

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

1
makeText gibt ein Toast-Objekt zurück, sodass Sie nach dem makeText einfach .addGravity und .show hinzufügen können.
NikkyD

1
"Wenn der Fehler anzeigt, dass Sie makeText aufrufen müssen" - wann würde der Fehler auftreten?
Jacek Laskowski

1
Der Fehler tritt auf, wenn Sie den Konstruktor so new Toast(context)anstelle vonToast.makeText(...)
bluewhile

16

Sie können den Ort Ihres Toasts anpassen, indem Sie Folgendes verwenden:

setGravity(int gravity, int xOffset, int yOffset)

docs

Auf diese Weise können Sie genau festlegen, wo sich der Standort Ihres Toasts befinden soll.

Eines der nützlichsten Dinge an den Parametern xOffset und yOffset ist, dass Sie sie verwenden können, um den Toast relativ zu einer bestimmten Ansicht zu platzieren.

Wenn Sie beispielsweise einen benutzerdefinierten Toast erstellen möchten, der über einer Schaltfläche angezeigt wird, können Sie eine Funktion wie die folgende erstellen:

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

2
Diese Antwort stackoverflow.com/a/21026866/630833 berücksichtigt die Größe von Toast, was für mich hilfreich war.
Jayeffkay

Dies ist ein großartiges Beispiel. Vielen Dank.
Wonsuc

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

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

Der obige Code hilft Ihnen dabei, Toast in der Mitte des Bildschirms anzuzeigen oder entsprechend Ihrer Wahl die Toastgravitation entsprechend Ihrem Bedarf einzustellen

Hinweis: Für diesen Prozess müssen Sie das Objekt Toast verwenden


3

Die Methode zum Ändern der Farbe, Position und Hintergrundfarbe von Toast ist:

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

Für eine zeilenweise Erklärung: https://www.youtube.com/watch?v=5bzhGd1HZOc


Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
Greg-449

2

Einstellen des Toasts auf dem oberen Bildschirm

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

jetzt unten

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

Auf die gleiche Weise können wir Toast links, rechts und auch in der Mitte einstellen

Klicken Sie hier


0

// Eine benutzerdefinierte Toastklasse, in der Sie nach Bedarf benutzerdefinierten oder Standard-Toast anzeigen können.)

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

        }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.