【问题标题】:How to remove text formatting when pasting from clipboard on Android从Android上的剪贴板粘贴时如何删除文本格式
【发布时间】:2014-10-25 11:13:38
【问题描述】:

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

我尝试通过添加addTextChangedListener 来添加textwatcher,在文本更改后我只执行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;
        }
    });

在我意识到我的手机上有两种类型的剪切/复制/粘贴之前,这工作得很好。一种是当编辑文本为空并且我长按该字段时。这会弹出一个弹出菜单。另一种是当字段中有文本时,当我长按时,这会在我的操作栏下方弹出一个剪切/复制/粘贴栏。我上面的代码只影响 bar-below-action bar 一。 :(

【问题讨论】:

    标签: java android android-edittext copy-paste


    【解决方案1】:

    问题:

    您正在做的事情是创建一个无限循环,因为每次您调用 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);
            }
    

    【讨论】:

    • 感谢您的回复,但这不起作用:(。我将其添加为 normalText 样式 #000000
    • 您现在面临的问题是什么?
    【解决方案2】:

    我已经解决了。

    我设置了一个onLongClickListener 以在弹出剪切/复制/粘贴菜单出现之前捕获它。

    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();
    

    然后如果EditText 中已经存在一个字符串,我返回false 以允许正常的android 系统下操作栏剪切/复制/粘贴功能工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2014-10-22
      相关资源
      最近更新 更多