我有一个自定义的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中,如果长按,则光标小部件附近会有一个小的“粘贴”小部件,或者点击光标。
当用户从此窗口小部件“粘贴”时,将不会调用onTextContextMenuItem(int id)
。结果,我不能做自定义粘贴。
有谁知道那个小的“粘贴”小部件是什么?我应该用哪种方法覆盖自己的“粘贴”?
答案 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();
}
});