2012-11-27 49 views
1

我有一個自定義視圖,該視圖擴展了具有用於富文本編輯的ToggleButtons的EditText。如果我允許自動完成,那麼當前單詞的指示符將觸發我對樣式跨度的檢測。如何確定EditText中的高亮/下劃線是否來自自動完成

例如,在大多數設備上,自動更正的符合條件的詞是下劃線。在輸入時,我有一個文本觀察器,用於跟蹤應用於文本的當前樣式,並在用戶切換樣式按鈕時添加新的可擴展樣式。這最終檢測下劃線並打開開關。

我可以編寫代碼來檢查是否在找到跨度之前設置了下劃線切換。 (我實際上需要爲我的所有樣式執行此操作,因爲有些設備使用背景顏色來指示當前的自動更正詞。)但我不確定將使用什麼來觸發將切換回到關閉狀態。檢查他們是否鍵入空格?當你選擇一個建議的單詞會發生什麼?

有沒有人這樣做?有沒有辦法來問,如果跨度來自自動完成或任何其他通知知道操作系統提請跨度?

+0

如果您自己生成所有樣式跨度(除了自動完成樣式),那麼爲什麼不向他們添加標誌/標識等內容?只有包含這樣一個標誌/ ID的跨度,你才能切換相關的「ToggleButton」。沒有它的Spans是系統生成的,因此應該被忽略。我可能會爲所有跨度創建簡單的子類來完成此操作,或者某種代理/包裝器。 –

+0

不幸的是,我自己並沒有生成它們。 – Jeff

+0

您能否詳細說明跨度如何生成?我很想看看他們來自哪裏。 –

回答

0

這是一個老問題,但剛纔我有一個類似的問題,即在將跨度轉換爲HTML之前消除不需要的下劃線。我在源碼中找到了答案TextView

有一種方法TextView#clearComposingText(),它將刪除自動建議過程中由IME應用的所有樣式,並保留所有其他樣式。您可能會在每次用戶按鍵後調用它,這會刪除下劃線。

希望這可以幫助別人。