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

UMA*_*MAR 262 android toast

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

现在我想根据我的选择在屏幕中间或某处显示它.

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

Pen*_*m10 395

文档中,

定位你的吐司

标准吐司通知出现在屏幕底部附近,水平居中.您可以使用该setGravity(int, int, int)方法更改此位置 .这接受三个参数: Gravity常量,x-position偏移和y-position偏移.

例如,如果您确定吐司应该出现在左上角,您可以像这样设置重力:

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
Run Code Online (Sandbox Code Playgroud)

如果要将位置微移到右侧,请增加第二个参数的值.要轻推它,请增加最后一个参数的值.

  • 那里的整数值是多少?他们是dpi吗?或者最大值是多少? (11认同)
  • 可能会指出明显的,但是"Gravity.CENTER_VERTICAL"会将吐司放在屏幕中间. (9认同)
  • x和y偏移量以像素为单位,因此最大值是显示宽度/高度. (3认同)
  • @Pentium10文档声明偏移以像素为单位.我应该假设这些是"px"单位,而不是"dp"单位吗? (2认同)

Rym*_*nel 143

顺便说一句,如果您收到错误消息,表明您必须调用makeText,则以下代码使其工作:

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

  • makeText 返回一个 Toast 对象,因此您可以简单地在 makeText 之后添加 .addGravity 和 .show 。 (3认同)

JDJ*_*JDJ 14

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

setGravity(int gravity, int xOffset, int yOffset)

文档

这使您可以非常具体地了解Toast的位置.

关于xOffset和yOffset参数最有用的一点是,您可以使用它们相对于某个视图放置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();       
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案http://stackoverflow.com/a/21026866/630833,考虑了Toast的大小,这对我很有帮助. (2认同)

nza*_*ala 11

 Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG);
 toast.setGravity(Gravity.CENTER, 0, 0);
 toast.show();
Run Code Online (Sandbox Code Playgroud)


小智 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();
Run Code Online (Sandbox Code Playgroud)

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

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


小智 7

文档

警告:从 Android Build.VERSION_CODES#R 开始,对于面向 API 级别 Build.VERSION_CODES#R 或更高级别的应用程序,此方法 ( setGravity ) 在文本toast 上调用时无操作。

这意味着setGravity不能再在 API 30+ 中使用,必须找到另一个来实现所需的行为。

  • 我想知道他们到底为什么这么做...... (5认同)