事件描述:
登录页面,输入11位手机号,四位验证码后,无需点击登录按钮,直接登录。当登录失败时,弹出dialog,对错误信息进行描述。发现Dialog未按照系统默认的在屏幕中心点显示,而是从屏幕上方,慢慢的移动到屏幕正中心。
测试过程:
屏蔽掉自动登录,改为手动登录,此时Dialog显示正常。后来怀疑是否是context造成的,直接在View层把context传递到Presenter中,调用Dialog展示方法,还是不行。
解决办法:
自动登录时,屏蔽掉输入框事件,当符合条件时,直接隐藏掉输入框。
结果分析
自动登录与手动登录的区别:手动登录时,当输入验证码时,因为有输入框遮挡登录按钮,此时需要关掉输入框,再点击登录;而自动登录的话,没有执行隐藏输入框操作,导致输入框与Dialog在同一图层,输入框把Dialog顶上去了,执行自动登录时,由于输入框的自动隐藏,Dialog下落,所以出现从上向下的动画。
隐藏输入框的方法:
public static void dismissKeyBoard(Context context) {
View view = ((Activity)context).getWindow().peekDecorView();
if(view != null) {
InputMethodManager inputManger = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManger.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}