2

我遇到了与这篇文章完全相反的问题 - 具体来说,我想在默认位置(居中,就在底部的状态栏上方)显示一个 toast,但它总是水平和垂直居中显示。

这是我用来显示 toast 的代码和调用(toastNavigation方法在与调用不同的类中):

public static void toastNavigation(Context context, CharSequence message,
        int duration, int gravity, int gravity_xOffset, int gravity_yOffset) {  
    Toast toast = Toast.makeText(context, message, duration);  
    toast.setGravity(gravity, gravity_xOffset, gravity_yOffset);  
    toast.show();
}

toastNavigation(this, 
    "My message", Toast.LENGTH_SHORT, Gravity.NO_GRAVITY, 0, 0);

为什么我的吐司会居中,即使我传递了表示“......没有设置重力。”的常数?我应该传递一些其他常量来清除从上下文继承的 GRAVITY 常量吗?

4

4 回答 4

4

如果您只需要默认值,我将假设您有充分的理由调用setGravity()

Toast 的默认重力设置是Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM,因此您可以应用这些设置来获得默认位置。

您可以在Toast 的源代码中看到这一点...检查 mGravity 字段的初始化。

于 2011-11-03T21:19:23.530 回答
1

对我来说,没有重力设置的吐司的默认位置是从底部向上 1/3 到 1/4 之间。

我发现 Gravity.BOTTOM 经常被引用为默认值,它实际上将重力设置为屏幕的最底部。我还发现 Gravity.NO_GRAVITY 将吐司设置在屏幕中央,就像 Gravity.CENTER 一样,而不是实际的默认位置。这是相当恼人的。我还没有找到将吐司设置回其真正默认位置的设置,我只需要制作一个新的吐司。

于 2019-11-03T18:41:41.257 回答
0

我检查了您的代码以在屏幕上显示吐司。做一件事,请删除对 setGravity 方法的调用,然后您的 toast 将根据您的要求出现在确切的位置。如果您尝试将 NO_GRAVITY 设置为吐司的重力,那么在这种情况下吐司将选择默认重力,吐司的默认重力值在窗口中居中(与对话框相同)。如有任何疑虑,请告诉我。谢谢。

于 2014-01-29T06:19:15.873 回答
-2

如果您想在默认位置显示 Toast,只需像这样调用它:

    Toast.makeText(context, message, duration).show();

这将在标准位置显示吐司。我的猜测是 NO_GRAVITY 不是 Toast 的默认设置。它可能使用重力底部并应用 y 值将其从屏幕底部拉起。

于 2011-11-03T21:14:14.390 回答