2012-04-07 40 views
0

我是Android和Java的新手。我的應用程序需要能夠檢查用戶在輸入內容時輸入的內容。如果用戶鍵入已標記的預定詞,則在用戶按下按鈕之前需要發生事件。看起來最好的選擇是TextWatcher和addChangedTextListener。我一直無法弄清楚如何讓它檢查一個字符序列(一個字)。例如,如果被標記的單詞是「非常」,則當用戶輸入「它非常溫暖」時。在編輯文本中,程序應該能夠識別「非常」被鍵入並以某種方式提醒用戶。如何使用TextWatcher檢查特定的字符串而不是一個字符?

我希望我能夠在不使用任何代碼的情況下做到這一點。任何可以給予的幫助將不勝感激。

回答

1

這是通過TextWatcher做的最簡單形式:

String word = "very"; 

TextWatcher watcher = new TextWatcher() { 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 

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

    public void afterTextChanged(Editable s) { 
     String tmp = s.toString().trim().toLowerCase(); 
     if(tmp.contains(word.toLowerCase())){ 
      //inform the user here 
     } 
    } 
}; 
+0

謝謝。它完美的工作! – ghodnett 2012-04-07 21:57:41

+0

那麼,有沒有一種方法可以修改此代碼以同時檢查多個標記的單詞?我現在的問題是,我會有一個未知數的被標記的單詞,可能存儲在散列表中,並且需要能夠判斷用戶是否使用了這些單詞中的任何一個。 – ghodnett 2012-04-07 22:14:10

+0

是的,使用** afterTextChanged **內的循環來做多個單詞 – waqaslam 2012-04-07 22:36:18

0

我會簡單地顯示一個例子:

String word = "very"; 
int wordProgress = 0; 

charTyped(char c) { 
    if (c == word.charAt(wordProgress)) { 
     wordProgress++; 
     if (wordProgress >= word.length()) { 
      AlertUserThatFlagWordWasTypedAndUseObjectiveCTypeMethodNamingSyntaxJustForFunBecauseIAmUsingObjectiveCAndIFindItQuiteAnoying(word); 
     } 
    } 
} 

這可能不是做的最好的方式,但它是最快和最有效的。如果您還在尋找脫字號位置更改和退格,那麼您將不得不修改此內容。

一個簡單得多的版本也可以處理退格和脫字運動,但效率會低很多,每次用戶輸入內容時都要檢查整個文本區域是否包含該單詞。

+0

謝謝。那麼我是不是需要一個TextWatcher呢,還是應該在裏面呢? – ghodnett 2012-04-07 21:40:57

+0

我從來沒有使用TextWatcher,但我從你的描述中猜測你會有類似的方法charTyped(char c)。每次鍵入字符時都會調用該方法。 – 2012-04-07 21:59:02

相關問題