android - 如何在 editText 中启用覆盖模式

标签 android user-interface

在 Android 应用程序中,我需要让用户在插入/覆盖模式之间进行选择,就像普通 PC 上的“插入”键一样。我使用 editText 组件。有什么简单的方法可以做到这一点,通过设置一些属性,调用一些方法(我还没有找到)?在这种情况下,我应该使用其他组件作为文本编辑器吗?

最佳答案

试试这个自定义 TextWatcher:

    LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.VERTICAL);
    final ToggleButton tb = new ToggleButton(this);
    tb.setTextOff("insert");
    tb.setTextOn("overwrite");
    tb.setTextSize(20);
    tb.setChecked(false);
    LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    ll.addView(tb, params);
    EditText et = new EditText(this);
    et.setTextSize(20);
    params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    ll.addView(et, params);
    setContentView(ll);

    TextWatcher watcher = new TextWatcher() {
        boolean formatting;
        int mStart;
        int mEnd;

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            this.mStart = -1;
            if (tb.isChecked() && before == 0) {
                mStart = start + count;
                mEnd = Math.min(mStart + count, s.length());
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            if (!formatting) {
                if (mStart >= 0) {
                    formatting = true;
    //                Log.d(TAG, "afterTextChanged s " + start);
    //                Log.d(TAG, "afterTextChanged e " + end);
                    s.replace(mStart, mEnd, "");
                    formatting = false;
                }
            }
        }
    };
    et.addTextChangedListener(watcher);

关于android - 如何在 editText 中启用覆盖模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22318903/

相关文章:

android - 来自 Firebase 消息服务的 SQLite 后台插入

Java如何让JLabels展开

java - android.support.design.widget.CollapsingToolbarLayout.setTitle - null 对象引用

android - 我可以在运行时以编程方式设置 "android:layout_below"吗?

android - 需要 "How To"来为 Android 和 NDK 11 重建 OpenCV v2.4.12 和 v.3.1

android - 如何调试android UI样式

c++ - 我如何解决 GetParent/EnumChildWindows 不对称问题?

c++ - 实现自定义 QListWidgetItem?

java - 如何从另一个类执行一个类的方法?

android - Android 移动框架 odoo v1 的 ListView 出现故障