如何在Android上从剪贴板粘贴时删除文本格式

时间:2014-09-01 08:56:28

标签: java android android-edittext copy-paste

目前我正在开发一款Android应用程序,该应用程序需要允许用户剪切复制并粘贴到editText字段。但是当我从其他位置复制格式化的字符串(即带下划线的字符串)并将其粘贴到editText字段时,它会将其显示为格式化版本。如何删除它?

我尝试通过添加textwatcher添加addTextChangedListener,并且在后文本更改中我只做edittext.setText(s.toString()+"")但这会创建一个无限循环。 :(

请帮忙!提前谢谢。

编辑---- 我通过设置setCustomSelectionActionModeCallback

取得了一些进展
editDestination_.setCustomSelectionActionModeCallback(new Callback() {
        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {return true;}
        @Override
        public void onDestroyActionMode(ActionMode mode) {}
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
             menu.removeItem(android.R.id.paste);
             menu.removeItem(android.R.id.selectAll);
             menu.add(0, CUSTOM_PASTE, 0, "Paste").setIcon(R.drawable.paste_ic);
                return true;
        }
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
             switch (item.getItemId()) {
                case CUSTOM_PASTE:
                       edittext.setText(readFromClipboard(aContext_));
                    // Finish and close the ActionMode
                    mode.finish();
                    return true;
                default:
                    break;
            }
            return false;
        }
    });

这很有效,直到我发现手机上有两种类型的剪切/复制/粘贴。一个是编辑文本为空时我长时间点击该字段。这会弹出一个弹出菜单。另一个是当字段中有文本时,当我长按时,这会在我的操作栏下面显示剪切/复制/粘贴栏。我上面的代码只影响了一个低于行动的条形码。 :(

2 个答案:

答案 0 :(得分:0)

问题:

你正在做的事情是创建一个无限循环,因为每当你调用setText()时,再次调用afterTextChanged()(因为你正在更改EditText内的文本。

解决方案:

假设EditTexteditTextToClearStyle

EditText editTextToClearStyle   = (EditText)findViewById(R.id.youredittextname);

editTextToClearStyle.addTextChangedListener(new TextWatcher(){
        public void afterTextChanged(Editable s) {
           editTextToClearStyle.setTextAppearance(getApplicationContext(),R.style.normalText);
        }

答案 1 :(得分:0)

我已经解决了。 我在弹出剪切/复制/粘贴菜单出现之前设置了一个长按单元监听器来捕获它

CharSequence actions[] = new CharSequence[] {"paste"};
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setCancelable(true);
                builder.setItems(actions, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        edittext.setText(readFromClipboard(aContext_));
                    }
                });
                builder.show();

然后如果编辑文本中已经存在字符串,我返回false以允许正常的android系统under-action-bar-cut / copy / paste功能工作。