如何处理Android 3.0(Honeycomb)中的“粘贴”事件?

时间:2011-07-11 09:29:28

标签: android textview android-edittext android-3.0-honeycomb paste

我有一个自定义的EditText,需要自定义“粘贴”。

我覆盖onTextContextMenuItem(int id)来处理通过选择上下文菜单请求的“粘贴”。

@Override
public boolean onTextContextMenuItem(int id) {
  switch(id){
  case android.R.id.paste:
    doMyPaste();
    return true;
  }
}

这适用于3.0之前的Android 但是,在3.0中,如果长按,则光标小部件附近会有一个小的“粘贴”小部件,或者点击光标。 enter image description here
当用户从此窗口小部件“粘贴”时,将不会调用onTextContextMenuItem(int id)。结果,我不能做自定义粘贴。
有谁知道那个小的“粘贴”小部件是什么?我应该用哪种方法覆盖自己的“粘贴”?

2 个答案:

答案 0 :(得分:1)

要涵盖所有基础,这必须是特定于API的,因此您必须承诺以两种不同的方式执行此操作。

对于新的API,新的android.content.ClipboardManager界面提供了传输任何所需MIME类型所需的一切。

对于旧的API,如果您希望使用旧的android.text.ClipboardManager,则必须非常棘手。只需base-64对图像(或其他)的数据进行编码,然后将其作为文本发送。在接收方,只需逆转过程。

您甚至可以通过确定您是android.text.ClipboardManager还是android.content.ClipboardManager来“自动检测”并采取相应行动!

此外,如果您不处理任何事情,您的处理程序方法应返回super.onTextContextMenuItem(id)。也许是编辑工件?

就粘贴小部件而言,它不存在于旧的API中,或者可能存在于某些OEM UI上,您可能只是自己实现,或使用降级的交互方法。将文本放在剪贴板上后,粘贴命令将显示在“普通”上下文菜单中。

答案 1 :(得分:0)

在afterTextChanged()方法内调用过去的事件立即检查

editBox.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

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

            @Override
            public void afterTextChanged(Editable s) {
                // do with text
               Toast.makeText(getApplicationContext(), "call past", Toast.LENGTH_SHORT).show();
            }
        });