如何在Android中更改Toast的位置?


279

当我用来Toast在屏幕上显示一些弹出文本时,它会在屏幕底部(默认位置)上方显示一些文本。

现在,我想根据自己的选择在屏幕中间或某处显示它。

谁能指导我如何实现这一目标?

Answers:


410

文档中

定位吐司

在屏幕底部附近,水平居中显示标准的敬酒通知。您可以使用setGravity(int, int, int)方法更改此位置 。它接受三个参数: Gravity常数,x-position偏移量和y-position偏移量。

例如,如果您决定将吐司面包显示在左上角,则可以这样设置重力:

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

如果要向右微移位置,请增加第二个参数的值。要微调它,请增加最后一个参数的值。


11
那里的整数是多少?他们是dpi吗?或最大是多少?
clifgray 2013年

9
可能会指出明显的内容,但Gravity.CENTER_VERTICAL会将吐司放在屏幕中间。
Felix

3
x和y偏移量以像素为单位,因此最大值是您的显示宽度/高度。
bluewhile 2013年

2
@ Pentium10文档指出,偏移量以像素为单位。我是否应该假设这些是“ px”单位,而不是“ dp”单位?
batbrat 2014年

我在新星系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返回一个Toast对象,因此您只需在makeText之后添加.addGravity和.show即可。
NikkyD 2012年

1
“如果收到指示必须调用makeText的错误 -错误何时出现?
Jacek Laskowski

1
如果您使用构造函数new Toast(context)而不是Toast.makeText(...)
bluewhile

16

您可以使用以下方法自定义Toast的位置:

setGravity(int gravity, int xOffset, int yOffset)

docs

这使您可以非常具体地确定Toast的位置。

关于xOffset和yOffset参数最有用的事情之一是,您可以使用它们相对于某个View放置Toast。

例如,如果您要制作显示在Button顶部的自定义Toast,则可以创建如下函数:

// 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,考虑了Toast的大小,这对我有所帮助。
jayeffkay 2014年

这是一个很好的例子。谢谢。
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();

上面的代码将帮助您在屏幕中间或根据您的选择显示吐司,只需根据您的需要设置吐司重力

注意:对于此过程,您必须使用Toast对象


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


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会无效。
greg-449

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

        }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.