2011-11-15 111 views
0

我試圖實現iPhone一樣的PIN碼授權使用4塊的EditText像這樣:Android的虛擬鍵盤事件

iphone pin authorization

我使用TextWatcher檢查,如果場被改變,所以我能跳塊之間。 下面是代碼:

@Override 
public void afterTextChanged(Editable s) { 
    if (del && index > 0) { 
     pin[index - 1].requestFocus(); 
    } 
    else if (! del && ind < 3) { 
     pin[index + 1].requestFocus(); 
    } 
} 

@Override 
public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 

    del = count != 0; 
} 

一切正常,除了當塊是空的,DEL /空格鍵被按下時,我想回到以前的塊並清除其價值的罰款。 這是TextWatcher讓我失敗的地方,因爲在空白塊中沒有做任何改變,它什麼都不做。

我嘗試過使用keyEventListener,但它只捕獲模擬器上的事件,而不是通過虛擬鍵盤在實際設備上。

任何人都可以提出一個想法,我如何捕獲DEL事件或任何其他方式來實現這一點?

回答

0

我找到了解決此問題的解決方法。這可能不是最好的解決方案,但它適用於我。 除了TextWatcher我已經添加到InputFilter

@Override 
public CharSequence filter(CharSequence source, int start, int end, 
     Spanned dest, int dstart, int dend) { 
    if (end == 0 && ind > 0 && dest.length() == 0) { 
     pin[ind - 1].requestFocus(); 
    } 
    return null; 
} 

我也認爲這是端口一個更好的主意來自TextWatcher代碼的其餘部分InputFilter

0

也許你可以檢查更改前後字段是否爲空?不知道是否有任何其他按鍵可以將該字段留空,因此您可以說,後退被按下並跳轉到前一個字段。好吧,這不是一個真正的技術解決方案,而只是查看問題的一種不同方式。

+0

是啊,我想到了這一點。但是TextWatcher綁定onTextChange事件,所以如果沒有改變,它不會觸發。如果有適當的事件發生,我仍在審閱文檔。感謝您的建議,但 –