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?

UMAR
quelle

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.

Pentium10
quelle
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();
Rymnel
quelle
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();       
}
JDJ
quelle
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();
nzala
quelle
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

user3652986
quelle
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

Mithun Adhikari
quelle
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

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

        }
Amardeep
quelle