Làm cách nào để thay đổi vị trí của Toast trong Android?


279

Khi tôi sử dụng Toastđể hiển thị một số văn bản bật lên trên màn hình, nó sẽ hiển thị văn bản ở phía dưới màn hình một chút, đó là vị trí mặc định.

Bây giờ tôi muốn hiển thị nó ở giữa màn hình hoặc một nơi nào đó theo sự lựa chọn của tôi.

Bất cứ ai có thể hướng dẫn tôi làm thế nào để đạt được điều này?

Câu trả lời:


410

Từ tài liệu ,

Định vị bánh mì nướng của bạn

Một thông báo bánh mì nướng tiêu chuẩn xuất hiện gần dưới cùng của màn hình, tập trung theo chiều ngang. Bạn có thể thay đổi vị trí này với setGravity(int, int, int)phương pháp. Điều này chấp nhận ba tham số: Gravityhằng số, x-positionbù và y-positionbù.

Ví dụ: nếu bạn quyết định rằng bánh mì nướng sẽ xuất hiện ở góc trên bên trái, bạn có thể đặt trọng lực như thế này:

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

Nếu bạn muốn nghiêng vị trí sang phải, hãy tăng giá trị của tham số thứ hai. Để đẩy nó xuống, tăng giá trị của tham số cuối cùng.


11
các giá trị nguyên ở đó là gì? Họ là dpi? hoặc tối đa là gì?
clifgray

9
Có thể chỉ ra điều hiển nhiên, nhưng Gravity.CENTER_VERTICALsẽ đặt bánh mì nướng ở giữa màn hình.
Felix

3
x và y offset được tính bằng pixel, vì vậy tối đa là chiều rộng / chiều cao hiển thị của bạn.
bluewhile

2
@ Pentium10 Các tài liệu nói rằng phần bù được tính bằng pixel. Tôi có nên cho rằng đây là những đơn vị "px", trái ngược với đơn vị "dp" không?
batbrat

Tin nhắn bánh mì nướng của tôi trên galaxy s6 mới của tôi hiển thị ở 2 vị trí khác nhau. đầu tiên ở trung tâm ngang bên trái dọc và sau đó di chuyển xuống trung tâm ngang, dọc dưới. hiệu ứng này không xảy ra trên bất kỳ thiết bị thử nghiệm cũ nào của tôi. Tôi hiển thị mỗi tin nhắn hai lần liên tiếp vì bất kỳ vòi màn hình nào sẽ giết bánh mì nướng đầu tiên ngay lập tức.,
Androidcoder 19/03/2016

150

Nếu bạn gặp lỗi cho biết bạn phải gọi makeText, đoạn mã sau sẽ khắc phục:

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

1
makeText trả về một đối tượng Toast, vì vậy bạn chỉ cần thêm .addGravity và .show sau makeText.
NikkyD

1
"Nếu bạn gặp lỗi cho biết bạn phải gọi makeText" - khi nào thì lỗi sẽ xuất hiện?
Jacek Laskowski

1
Lỗi xảy ra nếu bạn sử dụng Trình xây dựng new Toast(context)thay vìToast.makeText(...)
bluewhile

16

Bạn có thể tùy chỉnh vị trí của Toast bằng cách sử dụng:

setGravity(int gravity, int xOffset, int yOffset)

tài liệu

Điều này cho phép bạn rất cụ thể về nơi bạn muốn vị trí của Toast của bạn.

Một trong những điều hữu ích nhất về các tham số x Offerset và y Offerset là bạn có thể sử dụng chúng để đặt Toast tương đối với một Chế độ xem nhất định.

Ví dụ: nếu bạn muốn tạo một Toast tùy chỉnh xuất hiện trên đầu Nút, bạn có thể tạo một chức năng như thế này:

// 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
Câu trả lời này stackoverflow.com/a/21026866/630833 , xem xét kích thước của Toast, rất hữu ích cho tôi.
jayeffkay

Đây là một ví dụ tuyệt vời. Cảm ơn.
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();

Đoạn mã trên sẽ giúp bạn hiển thị bánh mì nướng ở giữa màn hình hoặc theo lựa chọn của bạn cho rằng chỉ cần đặt trọng lực bánh mì nướng theo nhu cầu của bạn

Lưu ý: Đối với quá trình này, bạn phải sử dụng đối tượng của Toast


3

Phương pháp để thay đổi màu sắc, vị trí và màu nền của bánh mì nướng là:

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

Đối với giải thích theo từng dòng: https://www.youtube.com/watch?v=5bzhGd1HZOc


Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
greg-449

2

cài đặt bánh mì nướng ở màn hình topin

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

bây giờ ở dưới cùng

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

cùng một cách chúng ta có thể đặt bánh mì nướng ở bên trái, bên phải và cũng ở giữa

Nhấn vào đây


0

// Một lớp bánh mì nướng tùy chỉnh nơi bạn có thể hiển thị bánh mì nướng tùy chỉnh hoặc mặc định như mong muốn)

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

        }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.