2013-03-06 34 views
4

我創建了一個自定義EditText擴展android.widget.EditTextEditText:切換InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

我想自動修正跨度只有在EditText有焦點時纔可見。所以,我呼籲setInputType(INPUT_NO_FOCUS);在構造和:

@Override 
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 
    super.onFocusChanged(focused, direction, previouslyFocusedRect); 
    if (focused) { 
     setInputType(INPUT_FOCUS); 
    } else { 
     setInputType(INPUT_NO_FOCUS); 
    } 
} 

有:

private final int INPUT_NO_FOCUS = TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE 
     | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; 
private final int INPUT_FOCUS = TYPE_CLASS_TEXT | TYPE_TEXT_FLAG_MULTI_LINE 
     | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT | InputType.TYPE_TEXT_FLAG_AUTO_COMPLET; 

==>確實是有沒有自動校正和自動完成,但點擊後EditText沒有出現。輸入類型已成功更改。

如何觸發自動更正/添加自動完成?

//編輯:

用戶案例我要存檔:顯示

  1. MyEditText extends EditText視圖,而不是聚焦。對文本沒有拼寫檢查( - >文本下沒有紅色跨度/行)

  2. 用戶單擊進入編輯字段。 - >拼寫檢查被觸發 - >出現紅線(用戶可以點擊錯誤的拼寫單詞並讓操作系統糾正它們)

  3. 用戶單擊另一個視圖元素 - >紅線/跨度消失。

+0

用戶編輯文本可以請你讓問題更加清除..如果可能的話與圖像 – stinepike 2013-03-14 13:53:12

+0

添加一個使用案例場景 – 2013-03-14 17:33:23

+0

:(因爲我沒有對自動更正工作,因此無法完全可視化您的案例。您可以在setinputtype – stinepike 2013-03-14 17:58:08

回答

2

恐怕沒有好辦法做到這一點。問題在於,Android框架並沒有真正的機制來告訴鍵盤什麼時候輸入類型發生了變化。鍵盤通常會在打開字段時檢查類型。之後,如果類型發生變化,它將不知道,除非它輪詢它,並且我不認爲現有的鍵盤會這樣做。

0

重寫此方法在MyEditText類

@Override 
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { 
     super.onTextChanged(text, start, lengthBefore, lengthAfter); 
     setInputType(INPUT_FOCUS); 
    }

使用這種方法,你可以改變的EditText的的inputType到INPUT_FOCUS,顯示在文本紅線時的MyEditText

+0

我試過了,但仍然沒有觸發修正咒語 – 2013-03-16 12:25:25