如果该 toast 已经显示,则 Toast 位置不会更新
Toast location does not update if that toast is already showing
我的问题特别涉及刷新已创建的 toasts。
例如,我创建了一个 toast:
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();
两个动作都很好!但是如果我在屏幕上快速点击并在吐司消失之前激活第二个动作,即使消息更新,重力也不会改变。
例如:如果我选择了错误的答案,"wrong" 消息显示在屏幕中间:
然后我立即选择写答案奖金消息出现在屏幕中间(即使我告诉它设置 setGravity(Gravity.TOP|Gravity.RIGHT, 20, 20);
)
(注意:如果我等到 "Wrong" 消息消失,然后单击正确答案,奖金消息会按预期显示在左上角)
我想让它做的是始终将奖励信息放在左上角。即使用户点击快。所以我问:有没有一种方法可以取消以前的吐司,以便在正确的位置显示新消息。或者我应该做些什么(例如刷新我的 activity)以便消息显示在正确的位置。
你应该使用
Close the view
if it's showing, or don't show it if it isn't showing yet. You do not normally have to call this. Normally view
will disappear on its own after the appropriate duration.
试试这个
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 ...
我写了下面的示例代码,那是working.Please看看那个
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 中创建一个按钮并进行测试,如果遇到任何问题请告诉我。进一步你可以根据你的需要进行调整。
我的问题特别涉及刷新已创建的 toasts。
例如,我创建了一个 toast:
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();
两个动作都很好!但是如果我在屏幕上快速点击并在吐司消失之前激活第二个动作,即使消息更新,重力也不会改变。
例如:如果我选择了错误的答案,"wrong" 消息显示在屏幕中间:
然后我立即选择写答案奖金消息出现在屏幕中间(即使我告诉它设置 setGravity(Gravity.TOP|Gravity.RIGHT, 20, 20);
)
(注意:如果我等到 "Wrong" 消息消失,然后单击正确答案,奖金消息会按预期显示在左上角)
我想让它做的是始终将奖励信息放在左上角。即使用户点击快。所以我问:有没有一种方法可以取消以前的吐司,以便在正确的位置显示新消息。或者我应该做些什么(例如刷新我的 activity)以便消息显示在正确的位置。
你应该使用
Close the
view
if it's showing, or don't show it if it isn't showing yet. You do not normally have to call this. Normallyview
will disappear on its own after the appropriate duration.
试试这个
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 ...
我写了下面的示例代码,那是working.Please看看那个
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 中创建一个按钮并进行测试,如果遇到任何问题请告诉我。进一步你可以根据你的需要进行调整。