5

我的應用使用基於PIN的登錄。我有一個四點連勝的EditText意見,並設置以下TextWatcher的一個單獨的實例上的每個人:三星軟鍵盤在焦點變化後丟失按鍵

private class PinDigitWatcher implements TextWatcher { 

    private final EditText digit; 

    public PinDigitWatcher(EditText digit) { 
     this.digit = digit; 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     if (s.length() <= 0) 
      return; 
     switch (digit.getId()) { 
     case R.id.pin_digit_a: 
      mPinDigitB.setFocusableInTouchMode(true); 
      mPinDigitB.requestFocus(); 
      mPinDigitA.setFocusable(false); 
      break; 
     case R.id.pin_digit_b: 
      mPinDigitC.setFocusableInTouchMode(true); 
      mPinDigitC.requestFocus(); 
      mPinDigitB.setFocusable(false); 
      break; 
     case R.id.pin_digit_c: 
      mPinDigitD.setFocusableInTouchMode(true); 
      mPinDigitD.requestFocus(); 
      mPinDigitC.setFocusable(false); 
      break; 
     case R.id.pin_digit_d: 
      mPinDigitD.setFocusable(false); 
      onSubmitPin(); 
      break; 
     } 
    } 

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

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { } 
} 

每個用戶將文本輸入到EditText上的一個觀看TextWatcher移動的時間焦點到「下一個」一。如果用戶在最後一個輸入文本,則將請求發送到服務器。

這項工作在我測試過的所有設備上都很棒,但三星S3和S4的除外。在這些設備上,當用戶點擊軟鍵盤上的按鍵時,焦點改變後會有半秒的延遲。結果是,如果用戶點擊第一個EditText以調出鍵盤,則快速連續敲擊一個數字四次(例如,如果他的PIN是「1111」),第一個數字被註冊,焦點改變,但其他三個數字是下降。

我進入了「三星鍵盤設置」,並禁用預測文字,自動替換,自動大小寫,自動間隔和自動標點符號。似乎沒有什麼區別。

我的S3和S4都運行Android 4.3,所以,不幸的是,我不能說這是「三星問題」還是「Android 4.3問題」。我已經驗證它不會在運行4.2.2的Galaxy Nexus和運行4.4.2的Nexus 4上發生。

任何關於解決方法的想法?

編輯:

我重建問題上的三星S4運行的是Android 4.2.2所以它似乎是一個三星的問題,而不是Android 4.3的明確。這裏是說明行爲的工作項目:拳頭的EditText

https://drive.google.com/file/d/0B6DvDY2BvxUTRUxZNE5DNXJJM2c

點擊彈出軟鍵盤,然後點擊快速連續任一數字鍵四次。只有第一個水龍頭會被註冊。在四個水龍頭結束時,重點將放在第二個EditText(從左邊開始)。

編輯:在兩款手機表現出的問題

更多信息:

  • S4:三星SGH-I337,採用Android 4.3,共築:JSS15J.I337UCUEMK2, 內核:3.4。 0-1921628 2013年11月16日)
  • S3:三星SGH-I747,機器人4.3,生成:JSS15J.I747UCUEMJB, 內核:3.0.31-2024954 2013年10月31日)
+0

我無法重現上GT-I9506採用Android 4.3的問題;三星鍵盤(它在App信息屏幕上顯示版本4.0),輸入語言:英語(英國)。 – ozbek

+0

嘗試儘可能快地敲打單個號碼。我在大約1秒內對數字「1」進行了四次敲擊,其中只有兩次進入了EditTexts。我認爲這個掛斷是與三星軟鍵盤。它正在做一些事情,導致它無視額外的水龍頭,直到它完成它所做的任何事情。我編輯了這個問題,以便在我看到問題的手機中包含更詳細的信息。 – jph

+0

對此有何更新?在三星設備上有相同的問題很長一段時間。一旦我連接TextWatcher輸入變得非常慢。 – Mikhail

回答

2

一個快速猜測:嘗試在的方法TextWatcher做檢查。

由於onTextChanged()afterTextChanged()之前被調用,它可能會導致三星設備更快地識別焦點開關,從而避免造成您的麻煩的延遲。

此外,請嘗試玩EditTextinputType屬性(例如將其設置爲numbertextNoSuggestions)以進一步提高速度。

+0

好想法。週二我回到辦公室時會試試。 – jph

+0

所以我試着把檢查放在beforeTextChanged()。不用找了。然後我嘗試將輸入類型更改爲「numberPassword」;不用找了。以前的inputType是「number」,「password」是「true」。我想我會把它寫成三星的一部分,而不再擔心它。 PIN輸入功能仍然可用,滯後只是令人討厭。 – jph

0

使用如下因素link並在其中使用線程在文字方面改變聽者