在 android 中创建 toast 并指定位置

Creating a toast in android and specifying the location

我正在开发我的第一个 Android 应用程序,我正在尝试创建一个 toast 并指定我希望它出现的位置。当我使用现在注释的代码(它没有自定义 toast 的位置)时,应用程序 运行 在模拟器上完美运行,但现在我正在尝试自定义位置并使用注释下方的代码,当我单击用于显示祝酒词的按钮上的 UI 时,应用程序停止 运行。

你知道为什么会这样吗?因为我已经看到非常相似的代码(几乎相同)呈现为正确的,所以这应该有效。我知道这是一个非常简单的代码和一个简单的问题,但我仍然无法弄清楚我的代码有什么问题。

这是我的代码 onButtonClick:

public void onClick(View V) {

            // Toast.makeText(QuizActivity.this,
            //                 R.string.correct_toast,
            //                 Toast.LENGTH_SHORT).show();

            Toast t = new Toast(QuizActivity.this);
            t.setText(R.string.correct_toast);
            t.setDuration(Toast.LENGTH_SHORT);
            t.setGravity(Gravity.TOP|Gravity.LEFT,0,0);
            t.show();

        }

来自文档:

https://developer.android.com/guide/topics/ui/notifiers/toasts#java

定位 Toast

标准的 toast 通知出现在屏幕底部附近,水平居中。您可以使用 setGravity(int, int, int) 方法更改此位置。这接受三个参数:重力常数、x 位置偏移量和 y 位置偏移量。

例如,如果你决定吐司出现在左上角,你可以这样设置引力:

JAVA

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

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

来自 https://developer.android.com/reference/android/widget/Toast#Toast(android.content.Context) :

Construct an empty Toast object. You must call setView(View) before you can call show().

您的代码崩溃是因为您现在正在使用 Toast() 构造函数。并且您需要在 show() 之前 setView(View)。虽然这对于 makeText().

不是必需的

据我了解,makeText() 会创建一个视图,供您从第二个参数设置文本。但是构造函数没有,setText() 方法也没有。 setText() 仅更新现有文本:

来自 https://developer.android.com/reference/android/widget/Toast#setText(int) :

Update the text in a Toast that was previously created using one of the makeText() methods.

这是一个如何做到这一点的例子:

Custom toast on Android: a simple example

编辑

在任何情况下,您都可以使用初始代码创建 Toast,而无需调用 show()

public void onClick(View V) {

        Toast t = Toast.makeText(QuizActivity.this,
                        R.string.correct_toast,
                        Toast.LENGTH_SHORT);


        t.setGravity(Gravity.TOP|Gravity.LEFT,0,0);
        t.show();

    }

编辑 2

现在您已经编辑了您的代码,但是您正在传递按钮视图。