एंड्रॉइड में टोस्ट की स्थिति कैसे बदलें?


279

जब मैं Toastस्क्रीन पर कुछ पॉपअप पाठ प्रदर्शित करने के लिए उपयोग करता हूं , तो यह पाठ को स्क्रीन के नीचे से थोड़ा ऊपर प्रदर्शित करता है, जो कि डिफ़ॉल्ट स्थिति है।

अब मैं इसे अपनी पसंद के अनुसार स्क्रीन के बीच या कहीं और प्रदर्शित करना चाहता हूं।

क्या कोई मुझे बता सकता है कि इसे कैसे प्राप्त किया जाए?

जवाबों:


410

से प्रलेखन ,

अपने टोस्ट की स्थिति

क्षैतिज रूप से केंद्रित स्क्रीन के नीचे एक मानक टोस्ट अधिसूचना दिखाई देती है। आप इस स्थिति को setGravity(int, int, int)विधि के साथ बदल सकते हैं । यह तीन मापदंडों को स्वीकार करता है: एक Gravityस्थिर, एक x-positionऑफसेट और एक y-positionऑफसेट।

उदाहरण के लिए, यदि आप तय करते हैं कि टोस्ट ऊपरी-बाएँ कोने में दिखाई दे, तो आप इस तरह गुरुत्वाकर्षण सेट कर सकते हैं:

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

यदि आप स्थिति को दाईं ओर करना चाहते हैं, तो दूसरे पैरामीटर का मान बढ़ाएं। इसे नीचे करने के लिए, अंतिम पैरामीटर का मान बढ़ाएँ।


11
पूर्णांक मान क्या हैं? क्या वे डीपीआई हैं? या अधिकतम क्या है?
clifgray

9
स्पष्ट इंगित कर सकता है, लेकिन Gravity.CENTER_VERTICALस्क्रीन के बीच में टोस्ट डाल देगा।
फेलिक्स

3
x और y ऑफसेट पिक्सेल में हैं, इसलिए अधिकतम आपके डिस्प्ले की चौड़ाई / ऊंचाई है।
ब्लूव्हेल

2
@ Pentium10 डॉक्स स्थिति बताता है कि ऑफ़सेट पिक्सेल में हैं। क्या मुझे यह मान लेना चाहिए कि ये "पीएक्स" इकाइयां हैं, जैसा कि "डीपी" इकाइयों के विपरीत है?
बल्लेबाजी

मेरी नई आकाशगंगा s6 शो में 2 अलग-अलग पदों पर मेरे टोस्ट संदेश। पहले बाएं क्षैतिज केंद्र में लंबवत और उसके बाद नीचे केंद्र क्षैतिज, नीचे ऊर्ध्वाधर में जाता है। यह प्रभाव मेरे किसी पुराने परीक्षण उपकरण पर नहीं होता है। मैं प्रत्येक संदेश को दो बार पंक्ति में प्रदर्शित करता हूं क्योंकि कोई भी स्क्रीन टैप तुरंत पहले टोस्ट को मारता है।
Androidcoder

150

यदि आपको यह इंगित करने में कोई त्रुटि मिलती है कि आपको MakeText को कॉल करना होगा, तो निम्न कोड इसे ठीक करेगा:

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

1
makeText एक टोस्ट ऑब्जेक्ट देता है, ताकि आप बस MakeText के बाद .addravity और .show जोड़ सकें।
१६:५० पर NikkyD

1
"यदि आपको यह इंगित करने में त्रुटि मिलती है कि आपको MakeText को कॉल करना होगा" - तो त्रुटि कब दिखाई देगी?
जसक लस्कॉस्की

1
त्रुटि तब होती है जब आप कन्स्ट्रक्टर का उपयोग करते new Toast(context)हैंToast.makeText(...)
bluewhile

16

आप का उपयोग करके अपने टोस्ट के स्थान को अनुकूलित कर सकते हैं:

setGravity(int gravity, int xOffset, int yOffset)

डॉक्स

यह आपको उस स्थान के बारे में बहुत विशिष्ट होने की अनुमति देता है जहाँ आप अपने टोस्ट का स्थान चाहते हैं।

XOffset और yOffset मापदंडों के बारे में सबसे उपयोगी चीजों में से एक यह है कि आप उन्हें एक निश्चित दृश्य के सापेक्ष टोस्ट रखने के लिए उपयोग कर सकते हैं।

उदाहरण के लिए, यदि आप एक बटन के ऊपर एक कस्टम टोस्ट बनाना चाहते हैं, तो आप इस तरह से एक फंक्शन बना सकते हैं:

// 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
यह उत्तर stackoverflow.com/a/21026866/630833 , टोस्ट के आकार को ध्यान में रखता है, जो मेरे लिए मददगार था।
jayeffkay

यह एक बेहतरीन उदाहरण है। धन्यवाद।
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();

उपरोक्त कोड आपको स्क्रीन के बीच में या उसके लिए उर विकल्प के अनुसार टोस्ट प्रदर्शित करने में मदद करेगा, बस उर जरूरत के अनुसार टोस्ट गुरुत्वाकर्षण सेट करें

नोट: इस प्रक्रिया के लिए यू को टोस्ट की वस्तु का उपयोग करना होगा


3

टोस्ट का रंग, स्थिति और पृष्ठभूमि रंग बदलने की विधि है:

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

लाइन द्वारा लाइन स्पष्टीकरण के लिए: https://www.youtube.com/watch?v=5bzhGd1HZOc


हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
ग्रग

2

टॉपिन स्क्रीन पर टोस्ट सेट करना

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

अब नीचे

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

उसी तरह हम बाएँ, दाएँ और भी केंद्र में टोस्ट सेट कर सकते हैं

यहां क्लिक करें


0

// एक कस्टम टोस्ट वर्ग जहाँ आप कस्टम या डिफ़ॉल्ट टोस्ट को इच्छानुसार दिखा सकते हैं)

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

        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.