如果吐司已经显示{Tom},则Toast位置不会更新

时间:2017-11-29 08:05:18

标签: android location toast gravity

我的问题,尤其是提到已经创建的祝酒词。

例如我有一个已创建的祝酒词:

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();

这两项行动都很好!但是,如果我快速点击屏幕并激活第二个动作,则在吐司消失之前,即使消息更新,重力也不会改变。

例如:如果我选择了错误的答案,那么"错误"消息显示在屏幕中间:

enter image description here

然后我立即选择写回答奖励消息出现在屏幕中间(即使我告诉它设置setGravity(Gravity.TOP|Gravity.RIGHT, 20, 20);

enter image description here

(注意:如果我等到"错误"消息消失,然后点击正确的答案,奖励消息会显示在左上角,如预期的那样)

我想要做的是始终将奖励消息放在左上角。即使用户点击快速。所以我在问:有没有办法可以取消之前的吐司,以便新消息显示在正确的位置。或者我应该做些什么(例如刷新我的活动),以便消息显示在正确的位置。

3 个答案:

答案 0 :(得分:2)

您应该在显示新的Toast消息之前取消当前的吐司。

if (myToast != null) {
    myToast.cancel();
}

// your code ...

答案 1 :(得分:2)

我已经编写了一个下面的示例代码,并且正在运行。请看一下

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中创建一个按钮并对其进行测试,如果您遇到任何问题,请告诉我。此外,您可以根据需要进行调整。

答案 2 :(得分:1)

你应该使用

Toast.cancel()

  

如果正在显示,请关闭view,如果尚未显示,请关闭它。你通常不必打电话给这个。通常view会在适当的持续时间后自行消失。

试试这个

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);
}