所以我目前正在开发一款基于回合制的游戏应用。并且它会在每次转弯之后从谁看到转向后显示祝酒词。但奇怪的是,如果我按下后退按钮它将返回到主菜单(之前的活动),但是吐司仍然会一直持续到超时。此外,如果我回击两次并进入主屏幕,那么祝酒词仍会显示直到完成。我想在按下后退按钮时执行检查或某种方法取消那些祝酒词。我也必须在我的视图中执行此操作,我的视图包含所有的祝酒词和游戏的所有代码,gameActivity只有onCreate来创建游戏视图。有什么想法吗?
答案 0 :(得分:6)
在您的活动中,您有覆盖方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// do something
yourView.notifyBackPressed();
return false;
}
return super.onKeyDown(keyCode, event);
}
在您的视图中,您必须实现方法,例如notifyBackPressed()
。
答案 1 :(得分:0)
试试这个...
您应该像这样设置自定义Toast的持续时间(毫秒)。
自定义吐司:
LayoutInflater inflater = getActivity().getLayoutInflater();
View layoutToast = inflater.inflate(R.layout.custom_toast_layout,
(ViewGroup) getActivity().findViewById(R.id.toastcustom));
((TextView) layoutToast.findViewById(R.id.texttoast)).setText("I'm custom toast");
final Toast myToast = new Toast(
(EmployerNominationView) getActivity());
myToast.setView(layoutToast);
myToast.setDuration(300);
myToast.setGravity(Gravity.BOTTOM, 0, 45);
myToast.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
myToast.cancel();
}
}, 1000);
答案 2 :(得分:0)
生成Toast
Toast toast;
toast = Toast.makeText(getBaseContext(), "Messages", Toast.LENGTH_LONG);
toast.show();
取消您可以在onKeyDown()或onBackPressed()上使用的Toast。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
toast.cancel();
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 3 :(得分:0)
//Try with making Toast Global and cancel the toast on Back Pr
Toast mToast = new Toast(ApplicationContext);
public void onBackPressed(){
mToast.cancel();
}
答案 4 :(得分:0)
我找到了这个并且会帮助你 的 Android AppMsg (Crouton) Library 强> 布局内通知的实施。基于Toast通知。
答案 5 :(得分:0)
我尝试使用以下方法通过第一种方法检测活动中操作栏上按下的后退按钮,第二种方法用于检测移动硬件按钮或杀死活动按钮。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
setResult(RESULT_CANCELED);
super.onBackPressed();
}