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