调用Dialog的dismiss()方法的方式:
1. 重写Dialog的onKeyDown()方法里进行调用:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d(Constant.TAG,"dialog onKeyDown");
if(keyCode == KeyEvent.KEYCODE_BACK) {
dismissOut();
return true;
}
return super.onKeyDown(keyCode, event);
}
会出现的问题:如果用一直按住Back键,则会一直调用dismissOut方法,会让退出动画不停的执行。
2. 重写Dialog的onKeyUp()方法里进行调用:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.d(Constant.TAG,"dialog onKeyDown");
if(keyCode == KeyEvent.KEYCODE_BACK) {
dismissOut();
return true;
}
return super.onKeyUp(keyCode, event);
}
会出现的问题:用户按下Back键,退出的Dialog出来,用户松开Back键,退出的Dialog就会马上消失
3. 重写Dialog的onBackPressed()方法里进行调用:
@Override
public void onBackPressed() {
Log.d(Constant.TAG,"dialog onKeyDown");
dismissOut();
}
这样就没有问题了。
其实onBackPressed()方法也是在onKeyUp方法里进行调用的,只是做了判断,代码如下:
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
onBackPressed();
return true;
}
return false;
}
本文详细解析了如何在Dialog组件中利用dismiss()方法实现不同场景下的退出动画控制,包括重写onKeyDown(), onKeyUp()和onBackPressed()方法的策略。通过对比不同方法的优缺点,为开发者提供灵活的退出逻辑设计建议。
6501

被折叠的 条评论
为什么被折叠?



