2012-03-08 32 views
5

我有3個EditText元素,如果輸入中有4個字符,我想從一個字段跳轉到下一個字段。使用TextWatcher計算字符在HTC longpress上失敗

我使用TextWatcher此:

getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) {} 

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

    @Override 
    public void afterTextChanged(Editable input) { 
     if(input.length() == 4){ 
      getEditView(R.id.edit_code2).requestFocus(); 
     } 
    } 
}); 

的EditText上的的inputType是「textCapCharacters」

在做一個鍵長按,以得到一個數字,就像是捧着R鍵得到4 ,大多數設備將不會添加該字母,直到用戶停止按住該按鈕,並且在選擇字母4之後將在文本更改後觸發。在HTC鍵盤(在這種情況下,2.3.5上的HTC Desire)情況並非如此。即使用戶仍然按住按鈕,R被添加到EditText中,afterTextChanged被觸發,代碼完成其工作並將焦點放在下一個字段上。

這種不良行爲如何防止?觀看onKeyDown/Up將無濟於事,因爲它不會註冊正常的擊鍵。

回答

1

不幸的是,它是HTC鍵盤中的一個缺陷,無法修復它。這是IME中的一個事件,它不可能攔截觸摸或按鍵事件,因此您可能最好僅僅讓用戶跳到下一個輸入,而不是爲他們做這件事。

如果這對你很重要,你可以在那裏實現你自己的鍵盤,只需要你需要的鍵。

+0

這就是我所害怕的,謝謝,我將離開選擇給客戶。無論如何,HTC鍵盤上始終可以使用數字輸入而不是longpress。 – Jurriaanr 2012-03-21 13:01:35

2
 getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() { 
@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    if(input.length() >3){ 
     getEditView(R.id.edit_code2).requestFocus(); 
@Override 
public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

@Override 
public void afterTextChanged(Editable input) { 

    } 
} 

});

+0

所有3個事件監聽器,onTextChanged,beforeTextChanged,afterTextChanged只要按下一個鍵就會觸發,因爲一個字母被添加到edittext中。問題在於鍵盤軟件的實現不會等待用戶釋放鍵並選擇一個數字,然後再添加它,然後調用所有事件監聽器 – Jurriaanr 2012-03-19 12:23:06

相關問題