我正在开发我的第一个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();
}
答案 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
现在,您已经编辑了代码,但是您正在传递按钮视图。