Bagaimana cara mengubah posisi Toast di Android?


279

Ketika saya gunakan Toastuntuk menampilkan beberapa teks popup di layar, ini akan menampilkan teks sedikit di atas bagian bawah layar, yang merupakan posisi default.

Sekarang saya ingin menampilkannya di tengah layar atau di suatu tempat sesuai pilihan saya.

Adakah yang bisa membimbing saya bagaimana mencapai ini?

Jawaban:


410

Dari dokumentasi ,

Memposisikan Toast Anda

Notifikasi roti panggang standar muncul di dekat bagian bawah layar, di tengah secara horizontal. Anda dapat mengubah posisi ini dengan setGravity(int, int, int)metode ini. Ini menerima tiga parameter: Gravitykonstanta, x-positionoffset, dan y-positionoffset.

Misalnya, jika Anda memutuskan bahwa roti panggang akan muncul di sudut kiri atas, Anda dapat mengatur gravitasi seperti ini:

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

Jika Anda ingin mendorong posisi ke kanan, naikkan nilai parameter kedua. Untuk mendorongnya ke bawah, tambah nilai parameter terakhir.


11
apa saja nilai integer di sana? Apakah mereka dpi? atau apa maksnya?
clifgray

9
Mungkin menunjukkan yang jelas, tetapi Gravity.CENTER_VERTICALakan menempatkan roti panggang di tengah layar.
Felix

3
offset x dan y berada dalam piksel, jadi maksimumnya adalah lebar / tinggi tampilan Anda.
bluewhile

2
@ Pentium10 Dokumen menyatakan bahwa offset dalam piksel. Haruskah saya berasumsi bahwa ini adalah unit "px", yang bertentangan dengan unit "dp"?
batbrat

Pesan roti panggang saya di galaksi s6 baru saya tampil di 2 posisi berbeda. mula-mula di tengah horizontal kiri vertikal dan kemudian turun ke tengah horisontal, vertikal bawah. efek ini tidak terjadi pada perangkat pengujian saya yang lebih lama. Saya menampilkan setiap pesan dua kali berturut-turut karena layar apa pun segera membunuh roti panggang pertama.,
Androidcoder

150

Jika Anda mendapatkan kesalahan yang menunjukkan bahwa Anda harus memanggil makeText, kode berikut akan memperbaikinya:

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

1
makeText mengembalikan objek Toast, jadi Anda bisa menambahkan .addGravity dan .show setelah makeText.
NikkyD

1
"jika Anda mendapatkan kesalahan yang menunjukkan bahwa Anda harus memanggil makeText" - kapan kesalahan itu muncul?
Jacek Laskowski

1
Kesalahan terjadi jika Anda menggunakan Konstruktor jadi new Toast(context)alih-alihToast.makeText(...)
bluewhile

16

Anda dapat menyesuaikan lokasi Toast Anda dengan menggunakan:

setGravity(int gravity, int xOffset, int yOffset)

docs

Ini memungkinkan Anda untuk menjadi sangat spesifik tentang di mana Anda ingin lokasi Toast Anda berada.

Salah satu hal yang paling berguna tentang parameter xOffset dan yOffset adalah Anda dapat menggunakannya untuk menempatkan Toast relatif ke tampilan tertentu.

Misalnya, jika Anda ingin membuat Toast khusus yang muncul di atas Button, Anda bisa membuat fungsi seperti ini:

// 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
Jawaban ini stackoverflow.com/a/21026866/630833 , mempertimbangkan ukuran Toast, yang sangat membantu saya.
jayeffkay

Ini adalah contoh yang bagus. Terima kasih.
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();

Kode di atas akan membantu Anda untuk menampilkan roti di tengah layar atau sesuai pilihan Anda untuk itu hanya mengatur gravitasi roti sesuai kebutuhan Anda

Catatan: Untuk proses ini Anda harus menggunakan objek Toast


3

Metode untuk mengubah warna, posisi, dan warna latar belakang roti bakar adalah:

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

Untuk penjelasan baris demi baris: https://www.youtube.com/watch?v=5bzhGd1HZOc


Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
greg-449

2

mengatur roti panggang di layar topin

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

sekarang di bawah

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

dengan cara yang sama kita dapat mengatur roti panggang di kiri, kanan dan juga tengah

Klik disini


0

// Kelas bersulang khusus tempat Anda dapat menampilkan roti panggang khusus atau standar sesuai keinginan)

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

        }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.