Android 如果Toast已显示,则Toast位置不会更新
特别是我的问题,是关于已经制作的烤面包的提神 例如,我有一个已经创建的祝酒词:Android 如果Toast已显示,则Toast位置不会更新,android,location,toast,gravity,Android,Location,Toast,Gravity,特别是我的问题,是关于已经制作的烤面包的提神 例如,我有一个已经创建的祝酒词: Toast myToast; // ... protected void onCreate(Bundle savedInstanceState) { // ... myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT); 我根据两个动作对其进行了不同的更新: if (answerGiven
Toast myToast;
// ...
protected void onCreate(Bundle savedInstanceState) {
// ...
myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT);
我根据两个动作对其进行了不同的更新:
if (answerGiven != correctAnswer) {
myToast.setText("Wrong");
View view = myToast.getView();
TextView text = (TextView) view.findViewById(android.R.id.message);
text.setTextColor(Color.RED);
text.setTextSize(32);
myToast.setGravity(Gravity.CENTER, 0, 0);
} else {
View view = myToast.getView();
TextView text = (TextView) view.findViewById(android.R.id.message);
text.setTextColor(Color.BLACK);
text.setTextSize(32);
myToast.setText("+" + bonus);
myToast.setGravity(Gravity.TOP|Gravity.RIGHT, 20, 20);
}
myToast.show();
两个动作都很好!但是,如果我快速点击屏幕并在烤面包片消失之前激活第二个动作,即使消息更新,重力也不会改变
例如:如果我选择了错误的答案,而“错误”的消息显示在屏幕中部:
然后我立即选择写答案,奖励信息出现在屏幕中间(即使我告诉它设置<代码> StestRead(重力,Gravity.RIGHT,20, 20);)
(注意:如果我等待“错误”消息消失,然后单击正确答案,奖金消息将按预期显示在左上角) 我希望它总是把奖金信息放在左上方。即使用户点击快速。所以我在问:有没有一种方法可以取消之前的祝酒词,从而在正确的位置显示新的祝酒词。或者我应该做些什么(例如刷新我的活动),以便消息显示在正确的位置。您应该使用 如果正在显示,请关闭视图
,如果尚未显示,则不显示。通常情况下,您不必将其称为。通常,视图
会在适当的持续时间后自行消失
试试这个
if (myToast!= null) {
myToast.cancel();
}
if (answerGiven != correctAnswer) {
myToast.setText("Wrong");
myToast.setGravity(Gravity.CENTER, 0, 0);
} else {
myToast.setText("+" + bonus);
myToast.setGravity(Gravity.TOP|Gravity.RIGHT, 20, 20);
}
您应该在显示新的toast消息之前取消当前toast
if (myToast != null) {
myToast.cancel();
}
// your code ...
我已经写了一个下面的示例代码,这是有效的。请看一看
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnAddData;
private TextView tv;
private EditText et;
private boolean check;
Toast myToast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT);
btnAddData = findViewById(R.id.btn_add_record);
btnAddData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (check) {
if (myToast.getView().isShown())
myToast.cancel();
check = false;
myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT);
myToast.setGravity(Gravity.CENTER, 0, 0);
myToast.show();
} else {
if (myToast.getView().isShown())
myToast.cancel();
check = true;
myToast = Toast.makeText(getApplicationContext(), "Welcome", Toast.LENGTH_SHORT);
myToast.setGravity(Gravity.TOP | Gravity.RIGHT, 20, 20);
myToast.show();
}
}
});
}
您需要用xml制作一个按钮并进行测试,如果遇到任何问题,请告诉我。此外,您还可以根据需要进行调整。感谢您的快速响应,不幸的是,现在祝酒词根本没有显示出来???嗯。。。还是没有出现。我的代码的其余部分与祝酒词无关,但可能还有其他问题。你有什么想法可以让祝酒被取消后不再出现?(更新了文章中的更多代码)在
Toast.cancel()
之后,我解决了问题,必须重新创建Toast。我使用的是Toast.setText()
,但当我将代码更改为Toast.makeText()
时,它就成功了!谢谢你的帮助!我很高兴这有助于:)快乐编码