Android'de Tost'un konumu nasıl değiştirilir?


279

Ben kullandığınızda Toastekranda bazı açılan metni görüntülemek için, bu biraz varsayılan konumudur ekranın alt tarafında yukarıdaki metni görüntüler.

Şimdi ekranın ortasında ya da seçimime göre bir yerde görüntülemek istiyorum.

Bunu başarmak için bana rehberlik eden var mı?

Yanıtlar:


410

Gönderen belgeler ,

Tostunuzu Konumlandırma

Ekranın alt kısmında, yatay olarak ortalanmış standart bir tost bildirimi görünür. Bu konumu setGravity(int, int, int)yöntemle değiştirebilirsiniz. Bu üç parametreyi kabul eder: Gravitysabit, x-positionofset ve y-positionofset.

Örneğin, tostun sol üst köşede görünmesi gerektiğine karar verirseniz, yerçekimini şu şekilde ayarlayabilirsiniz:

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

Konumu sağa sürüklemek istiyorsanız, ikinci parametrenin değerini artırın. Aşağı itmek için son parametrenin değerini artırın.


11
orada tamsayı değerler nelerdir? Onlar dpi mı? ya da maksimum nedir?
clifgray

9
Açık Gravity.CENTER_VERTICALolanı gösterebilir, ancak tostu ekranın ortasına koyacaktır.
Felix

3
x ve y ofseti piksel cinsindendir, bu nedenle maksimum görüntüleme genişliğiniz / yüksekliğinizdir.
bluewhile

2
@ Pentium10 Belgeler, ofsetlerin piksel cinsinden olduğunu belirtir. Bunların "dp" birimlerinin aksine "px" birimleri olduğunu varsaymalı mıyım?
batbrat

Yeni gökada s6'mdaki tost mesajlarım 2 farklı konumda gösteriliyor. önce sol yatay orta dikeyde, sonra aşağı orta yatay, alt dikeyde hareket eder. bu etki daha eski test aygıtlarımda gerçekleşmez. Herhangi bir ekran musluklar hemen ilk tost öldürmek beri her mesajı iki kez satırda görüntülemek.,
Androidcoder 19:16

150

MakeText'i aramanız gerektiğini belirten bir hata alırsanız, aşağıdaki kod sorunu düzeltir:

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

1
makeText bir Toast nesnesi döndürür, böylece makeText'ten sonra .addGravity ve .show ekleyebilirsiniz.
NikkyD

1
"makeText'i çağırmanız gerektiğini belirten bir hata alırsanız" - hata ne zaman görünecektir?
Jacek Laskowski

1
Oluşturucu new Toast(context)yerine böyle kullanırsanız hata oluşurToast.makeText(...)
bluewhile

16

Tostunuzun konumunu aşağıdakileri kullanarak özelleştirebilirsiniz:

setGravity(int gravity, int xOffset, int yOffset)

docs

Bu, Tost yerinizin nerede olmasını istediğiniz konusunda çok spesifik olmanızı sağlar.

XOffset ve yOffset parametreleri hakkında en kullanışlı şeylerden biri, Tost'u belirli bir Görünüme göre yerleştirmek için bunları kullanabilmenizdir.

Örneğin, bir Düğmenin üstünde görünen özel bir Tost yapmak istiyorsanız, aşağıdaki gibi bir işlev oluşturabilirsiniz:

// 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
Bu cevap stackoverflow.com/a/21026866/630833 , benim için yararlı olan Tost'un boyutunu dikkate alıyor.
jayeffkay

Bu harika bir örnek. Teşekkürler.
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();

Yukarıdaki kod, ekranın ortasında veya sizin seçiminize göre tostu göstermenize yardımcı olacaktır, bunun için tost gravitesini ihtiyacınıza göre ayarlayın

Not: Bu işlem için Toast nesnesini kullanmanız gerekir


3

Tostun rengini, konumunu ve arka plan rengini değiştirme yöntemi:

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

Satır satır açıklama için: https://www.youtube.com/watch?v=5bzhGd1HZOc


Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve bağlantıyı referans olarak sağlamak daha iyidir. Bağlantı verilen sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
greg-449

2

tostu üst ekranda ayarlama

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

şimdi altta

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

aynı şekilde sola, sağa ve ortada tost ayarlayabiliriz

Click burada


0

// Özel veya varsayılan tostu istediğiniz gibi gösterebileceğiniz özel bir tost sınıfı)

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

        }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.