91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

EditText控件如何自定義撤銷操作

發布時間:2024-08-20 16:55:21 來源:億速云 閱讀:81 作者:小樊 欄目:移動開發

要自定義EditText控件的撤銷操作,可以使用SpannableStringBuilder和TextWatcher來實現。以下是一個示例代碼:

public class CustomEditText extends AppCompatEditText {
    private Stack<CharSequence> mUndoStack = new Stack<>();
    private Stack<CharSequence> mRedoStack = new Stack<>();

    public CustomEditText(Context context) {
        super(context);
        init();
    }

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // do nothing
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                mUndoStack.push(new SpannableStringBuilder(s));
                mRedoStack.clear();
            }

            @Override
            public void afterTextChanged(Editable s) {
                // do nothing
            }
        });
    }

    public void undo() {
        if (!mUndoStack.isEmpty()) {
            CharSequence currentText = getText();
            mRedoStack.push(new SpannableStringBuilder(currentText));

            Editable editable = getText();
            editable.clear();
            editable.append(mUndoStack.pop());
        }
    }

    public void redo() {
        if (!mRedoStack.isEmpty()) {
            CharSequence currentText = getText();
            mUndoStack.push(new SpannableStringBuilder(currentText));

            Editable editable = getText();
            editable.clear();
            editable.append(mRedoStack.pop());
        }
    }
}

在這個自定義EditText控件中,我們使用兩個棧來保存撤銷和重做的操作。在TextWatcher中,每當文字發生改變時,我們將當前的文字內容保存到撤銷棧中。通過調用undo()和redo()方法,可以實現撤銷和重做操作。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清流县| 济南市| 乡宁县| 林西县| 大足县| 鄢陵县| 杨浦区| 门源| 名山县| 滕州市| 逊克县| 临西县| 平昌县| 黎城县| 濮阳市| 共和县| 射阳县| 嘉禾县| 鹿邑县| 渭源县| 台湾省| 阿鲁科尔沁旗| 天峻县| 阜城县| 苏州市| 华安县| 肥东县| 邵东县| 汝州市| 凤台县| 苏尼特右旗| 溧阳市| 土默特左旗| 虹口区| 二手房| 晋中市| 敦煌市| 邵武市| 三江| 从化市| 通道|