Dialog與輸入框的衝突
阿新 • • 發佈:2018-12-11
事件描述:
登入頁面,輸入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 );
}
}