2012-09-15 38 views
2

我需要讓用戶在格式hh:mm輸入時間,但由於issue 28132的我不能使用解決方法的類型時編輯顯示鍵盤沒有冒號

<EditText ... android:inputType="time"> 

我想我會接受任何分隔符,例如類似hh mm或的東西,但是這樣的字符也不能被鍵入(邏輯,因爲它們不屬於時間;冒號確實但鍵盤上丟失)。將類型更改爲text可行,但文本鍵盤不適合打字。

因此,我想在編輯開始之前刪除冒號,並在結束時將冒號放回去,但我不知道如何識別這些事件。 addTextChangedListener允許跟蹤所有細粒度的更改,但我認爲在編輯時期間更改文本並不合理,我寧願需要像editStartseditEnds這樣的事件,這與顯示和隱藏鍵盤相對應。 他們是這樣的事件嗎?

對於這個錯誤你會推薦什麼解決方法?

回答

1

您應該爲您的TextView使用InputFilter並驗證輸入是否爲Time類型。

由於TimeKeyListener也實現了InputFilter。

你很可能

TextView.setInputFilter({new TimeKeyListener()}); 

編輯: 或者你可以用甚至是自定義時間鍵收聽。作爲接受的字符

edittext.setKeyListener(new TimeKeyListener() { 
     public final char[] CHARS = new char[] { 
       '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'm', 'p', ':', '.' 
     }; 

     @Override 
     protected char[] getAcceptedChars() { 
      return CHARS; 
     } 
    }); 

現在它也很容易通過結腸更換備用隔板(點)喜歡如下:

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
    final CharSequence superSource = super.filter(source, start, end, dest, dstart, dend); 
    final CharSequence prefilteredSource = superSource!=null ? superSource : source; 
    return prefilteredSource.toString().replace('.', ':'); 
} 
+0

[這裏](http://developer.android。 com/reference/android/text/method/TimeKeyListener.html)寫的是*這個類只關注硬件鍵盤,*但我的問題是彈出錯誤的軟件鍵盤。所以恐怕它不適用。我也發現[InputMethod](http://developer.android.com/reference/android/view/inputmethod/InputMethod.html),但它看起來非常可怕。 – maaartinus

+0

它被寫入它沒有義務,但通常軟件iims使用它,你嘗試過嗎? – nandeesh

+0

我目前只能在Eclipse/AVD中試用它,它在那裏很好地工作。我添加了一個「過濾器」方法,以防有人在意。 – maaartinus

相關問題