অ্যান্ড্রয়েডে টোস্টের অবস্থান কীভাবে পরিবর্তন করবেন?


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
এক্স এবং ওয়াই অফসেট পিক্সেলে রয়েছে, তাই আপনার ডিসপ্লে প্রস্থ / উচ্চতা সর্বাধিক।
নীলদিকে

2
@ পেন্টিয়াম 10 ডক্সটি জানিয়েছে যে অফসেটগুলি পিক্সেলগুলিতে রয়েছে। আমার কি ধরে নেওয়া উচিত যে এগুলি "পিপি" ইউনিট, "ডিপি" ইউনিটের বিপরীতে?
ব্যাটব্র্যাট

আমার নতুন গ্যালাক্সি এস 6 এ আমার টোস্ট বার্তাগুলি 2 টি পৃথক অবস্থানে দেখায়। প্রথমে বাম অনুভূমিক কেন্দ্রটি উল্লম্বভাবে এবং তারপরে নীচে উলম্ব উল্লম্বভাবে কেন্দ্রের দিকে চলে যায়। এই প্রভাবটি আমার কোনও পুরানো পরীক্ষার ডিভাইসে ঘটে না। আমি যেহেতু কোনো পর্দা কল প্রথম টোস্ট হত্যা সরাসরি সারিতে দুইবার প্রত্যেক বার্তার প্রদর্শন,।
Androidcoder

150

আপনার যদি মেকটেক্সট কল করতে হবে তা বোঝাতে কোনও ত্রুটি পেলে নিম্নলিখিত কোডটি এটি ঠিক করে দেবে:

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

1
মেক টেক্সট একটি টোস্ট অবজেক্ট দেয়, যাতে আপনি কেবল মেক টেক্সটের পরে .addGravity এবং .show যুক্ত করতে পারেন।
নিককিড

1
"আপনি যদি মেকটেক্সটকে কল করতে হবে তা নির্দেশ করে ত্রুটি পেলে" - ত্রুটি কখন প্রদর্শিত হবে?
জ্যাসেক লাসকোভস্কি

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

        }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.