在Android中创建吐司并指定位置

时间:2018-08-09 01:03:42

标签: android android-studio android-toast

我正在开发我的第一个Android应用程序,并且试图创建一个Toast并指定我希望它出现的位置。当我使用现在注释的代码(它没有自定义吐司的位置)时,该应用程序在模拟器上完美运行,但是现在我尝试自定义位置并使用注释下方的代码,该应用程序停止运行当我在用户界面上单击旨在显示吐司的按钮时。

您是否知道为什么会这样?因为我看到非常相似的代码(几乎相同)被认为是正确的,所以这应该可以工作。我知道这是一个非常简单的代码和一个简单的问题,但是仍然无法弄清楚我的代码出了什么问题。

这是我的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();

        }

2 个答案:

答案 0 :(得分:0)

来自文档:

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

定位吐司

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

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

JAVA

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

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

答案 1 :(得分:0)

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

  

构造一个空的Toast对象。必须先调用setView(View),然后才能调用show()。

您的代码崩溃,因为现在您正在使用Toast()构造函数。并且您需要在setView(View)之前show()。尽管makeText()不需要这样做。

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

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

  

更新以前使用makeText()方法之一创建的Toast中的文本。

以下是如何执行此操作的示例:

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

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