3

我正在使用文本編輯器。如何在點擊Spinner時不會丟失文本選擇?

我有一個EditText小部件,其中輸入文本,並在下面用各種格式化小部件(如按鈕和Spinner)輸入一行。

用戶可以選擇文本,然後按下按鈕來打開和關閉粗體,斜體和其他格式化選項,這可以毫無困難地工作。

但是,對於用戶可以在運行Android 4.1或運行4.2.2的Nexus 4/7/10的Asus平板電腦上選擇顏色或字體等東西的Spinner,文本選擇會盡快消失點擊Spinner

在Samsung Galaxy SII上,此行爲不會發生。選擇在整個與Spinner的互動中保持不變。 (它運行Android 4.0.4,我不確定這個問題是否與Android版本相關,或者由於三星採取了不同的做法)。

我想在每臺設備上都有三星的行爲。我如何確保這是默認行爲?

+0

在運行4.0.3的模擬器上測試之後,似乎標準Android失去了焦點。所以不知何故,三星在默認行爲方面有一些差異,我想在其他設備上進行復制。 – Michel 2013-03-04 23:12:10

+0

運行調試程序顯示,通過長時間的調用堆棧,正在調用onWindowsFocusChanged,可能會將焦點置於微調器彈出對話框,並調用Editor onDestroyActionMode(ActionMode模式),最終刪除文本選擇。所以也許我需要設置一個自定義動作模式來避免這個問題,或者在調用超級版本並將其恢復之前將選擇保存在onWindowsFocusChanged中,但我不確定這種方法可能會產生什麼樣的負面影響...... – Michel 2013-03-04 23:57:46

+0

覆蓋這些鉤子來保存和恢復選擇狀態似乎是對我來說合理的解決方案。 – FoamyGuy 2013-03-05 01:56:41

回答

3

創建具有以下重寫一個自定義的EditText類的伎倆:

@Override 
public void onWindowFocusChanged (boolean hasWindowFocus) { 
    boolean hadSelection = this.hasSelection(); 
    int start=0, end=0; 
    if(hadSelection) { 
     start = getSelectionStart(); 
     end = getSelectionEnd(); 
    } 
    super.onWindowFocusChanged(hasWindowFocus); 
    if(hadSelection) { 
     setSelection(start, end); 
    } 
} 

我不能完全確定,在某些情況下,可能不會產生一些不必要的副作用。如果您使用此功能並遇到任何問題,請發佈評論或發佈避開它們的解決方案。

+0

沒有必要首先檢查hasSelection(),所以我沒有,但是我可以報告說,在運行Amazon的系統版本7.3.1的Kindle Fire HD上,這很好。 – MandisaW 2013-04-20 22:31:36

+0

精湛,拯救了我的生命:) – iBabur 2015-06-03 11:43:23

相關問題