一種基于安卓系統實現文字編輯中撤銷重做的方法【
技術領域:
】[0001]本發明涉及一種基于安卓系統實現文字編輯中撤銷重做的方法,屬于安卓系統終端設備編輯
技術領域:
。【
背景技術:
】[0002]用戶在使用手機的過程中,文本編輯是不可避免的操作之一。隨著安卓系統開發技術的發展,安卓系統的應用程序層出不窮,而這些應用程序或多或少都要涉及到文本編輯。[0003]隨著安卓應用程序的不斷完善,文本編輯的操作也越來越簡單、便捷。然而,當前的文本編輯存在一個不便之處,即缺少撤銷和重做功能。用戶在編輯的過程中難免會出現一些誤操作,比如大篇幅地誤刪掉之前編輯的內容或者大篇幅地粘貼了新的文本等。如果發生類似的誤操作,用戶需要繁瑣的再編輯工作,這樣就會帶來一些不必要麻煩,降低了工作效率和用戶體驗。[0004]中國專利文件"201210425018.7"(公開號102929485A)提供了一種字符輸入方法及裝置,所述方法包括:當監聽到用戶在文本編輯框中進行刪除操作時,記錄所述文本編輯框中的文本;根據所述刪除操作刪除所述文本編輯框中的N個字符,所述N為大于等于1的整數;檢測用戶是否輸入預設手勢;當檢測到用戶輸入所述預設手勢,根據記錄的所述文本編輯框中的文本恢復所述刪除操作刪除的字符。在本發明中,當用戶通過刪除鍵在移動終端的文本編輯框中進行刪除操作時,預先記錄文本編輯框中的文本,使得用戶一旦需要撤消刪除的內容時,可以通過輸入預設手勢進行恢復。此專利文件的不足在于兩點,一是只能針對刪除操作進行撤銷,而且撤銷操作只能執行一次,不能連續執行;二是刪除動作撤消后,若想重新刪除,此專利沒有重做功能。【
發明內容】[0005]針對現有技術的不足,本發明提供一種基于安卓系統實現文本編輯中撤銷和重做的方法。該方法可以解決用戶誤操作后的撤銷和重做問題,減少了用戶繁瑣的再編輯工作,使文本編輯更加人性化,操作起來更加簡單便捷,提高了用戶體驗。[0006]本發明的技術方案如下:[0007]-種基于安卓系統實現文字編輯中撤銷重做的方法,用戶在文本編輯框中進行文本內容操作,當用戶不想取消文本內容操作時,用戶不作為,保持現狀不變;當用戶想取消文本內容操作時,用戶撤銷文本內容操作,在用戶撤銷文本內容操作后:當用戶想重新恢復文本內容操作時,用戶重做文本內容操作;當用戶不想重新恢復文本內容操作,用戶不作為,保持現狀不變。所述的文本內容操作,可以是最近一次的文本內容操作,也可以是從最近一次開始的多次文本內容操作,即:用戶可以只撤銷最近一次的文本內容操作,對應的重做也是重做最近一次的文本內容操作;用戶也可以從最近一次文本內容操作開始,連續多次撤銷,連續多次撤銷后的重做可以重做一次,也可以是連續多次重做。[0008]根據本發明優選的,所述文本內容操作包括輸入和刪除。[0009]根據本發明優選的,具體包括步驟如下:[00?0](1)、通過ArrayList創建兩個堆棧,采用堆棧存儲文本編輯框中輸入的文本內容;[0011](2)、為文本編輯框綁定監聽器,所述監聽器為TextChangeListener、OnLongClickListener和OnClickListener;分別響應文本內容變更事件、長按事件和文本編輯框點擊事件;為文本編輯框綁定TextChangeListener,監聽文本編輯框內文本內容是否變化,并重寫beforeTextChanged()方法和afterTextChanged()方法來響應文本內容變更事件,當文本編輯框中的文本內容變更時,將新的文本內容添加到堆棧頂部;為文本編輯框綁定OnLongClickListener,監聽文本編輯框長按事件,并重寫onLongClick()方法來響應長按事件,當長按文本編輯框時彈出窗口;為文本編輯框綁定OnClickListener,監聽文本編輯框點擊事件,并重寫onClickO方法來響應文本編輯框點擊事件;[0012](3)、設計彈出窗口的布局文件,在所述布局文件中設計包括"撤銷"按鈕和"重做"按鈕;[00?3](4)、為"撤銷"按鈕和"重做"按鈕分別綁定OnClickListener;分別響應"撤銷"按鈕點擊事件和"重做"按鈕點擊事件。[0014]優選的,步驟(1)中,兩個堆棧分別是undostack和redostack。兩個堆棧均為動態數組,可動態改變長度,undostack內存儲的是用戶每次編輯的文本內容,其頂部內容即為文本編輯框當前所顯示內容;redostack內存儲的是用戶每次撤銷的文本內容,其頂部內容為當前想要重做的文本內容。[0015]優選的,步驟(1)中,文本編輯框為原始的EditText控件或用戶自定義的繼承于EditText的子類控件。[0016]優選的,步驟(2)中,彈出窗口為PopupWindow窗口。[0017]優選的,步驟(2)中,為文本編輯框綁定TextChangeListener,監聽是否有文本內容變更事件,若否,繼續監聽;若是,在&6;1^0161611:〇1&1^6(1(〇1&^691161106(3,;[11〖8七&1'1:,intcount,intafter)方法中創建字符串變量bf,將變更前文本c賦給字符串變量bf,bf=c.toString();[0018]在afterTextChanged(Editables)方法中,判斷undostack長度是否大于0:若否,將變更后文本s添加到undostack的頂部;若是,判斷變更后文本s與undostack頂部內容、字符串變量bf是否相同:若變更后文本s與undostack頂部內容相同或變更后文本s與字符串變量bf相同,則忽略此次文本內容變更事件,若變更后文本s與undostack頂部內容、字符串變量bf均不同,則將變更后文本s添加到undostack的頂部。[0019]優選的,步驟(2)中,為文本編輯框綁定OnLongClickListener,監聽文本編輯框是否有長按事件,若否,繼續監聽;若有,彈出PopupWindow窗口,并在onLongClickO方法中,設置PopupWindow窗口的屬性,屬性包括PopupWindow窗口的布局文件、窗口彈出的位置、窗口的大小等。[0020]優選的,步驟(2)中,為文本編輯框綁定OnClickListener,監聽是否有文本編輯框點擊事件,若否,繼續監聽;若有,在onClickO方法中,先判斷是否有PopupWindow對象以及PopupWindow對象是否正在顯示:若無PopupWindow對象或PopupWindow對象未正在顯示,貝丨J忽略此次文本編輯框點擊事件;若有PopupWindow對象且PopupWindow對象正在顯示,則將PopupWindow窗口關閉。[0021]優選的,步驟(4)中,為"撤銷"按鈕綁定OnClickListener,監聽有無點擊"撤銷"按鈕,點擊"撤銷"按鈕,則在"撤銷"按鈕綁定監聽器時重寫的onClick()方法中,將undostack頂部內容轉移到redostack中,使文本編輯框顯示undostack當前頂部內容,從而響應了"撤銷"按鈕點擊事件;為"重做"按鈕綁定OnClickListener,監聽有無點擊"重做"按鈕,點擊"重做"按鈕,則在"重做"按鈕綁定監聽器時重寫的onClickO方法中,將redostack頂部內容轉移到undostack中,使文本編輯框顯示undostack當前頂部的內容,從而響應了"重做"技鈕點擊事件。[0022]進一步優選的,所述步驟(4)中,為"撤銷"按鈕綁定OnClickListener,當監聽到點擊"撤銷"按鈕時,在"撤銷"按鈕綁定監聽器時重寫的onClick()方法中,先判斷undostack的長度是否大于0:若否,將文本編輯框內容清空,若是,先將undostack頂部內容添加到redostack頂部,再將undostack頂部內容清除,然后再一次判斷undostack此時的長度是否大于〇:若否,將文本編輯框內容清空,若是,將此時undostack頂部內容顯示在文本編輯框中;[0023]為"重做"按鈕綁定OnClickListener,當監聽到點擊"重做"按鈕時,在"重做"按鈕綁定監聽器時重寫的onClickO方法中,先判斷redostack的長度是否大于0:若否,忽略此次"重做"按鈕點擊事件;若是,將redostack頂部內容添加到undostack頂部,再將redostack頂部內容清除,然后將undostack頂部內容顯示在文本編輯框中。[0024]本發明的beforeTextChanged()方法、afterTextChanged()方法、onLongClick()方法、onClickO方法都是本領域技術人員在Java語言中常用的方法規則,本發明對安卓系統的文本編輯框進行改進,使得用戶在編輯文本時可根據個人編輯需要,通過長按編輯框彈出窗口,點擊窗口中的"撤銷"和"重做"按鈕可實現對文本編輯過程中誤操作的撤銷和文本編輯的重做。[0025]本發明的有益效果在于:[0026]1、根據本發明的技術方案,用戶在編輯文本的過程中,進行大篇幅刪除或者修改后,想要恢復操作之前的文本時,只需長按文本編輯框,便可彈出窗口,窗口中有撤銷按鈕和重做當前第1頁1 2 3