我有一个继承自EditText的类。我重写了onTextContextMenuItem的行为来处理对编辑文本上下文菜单(即已剪切,粘贴,复制的菜单)的点击。
在大多数设备上,当用户选择其中一个选项时,将调用此回调:
// id can be android.R.id.paste, android.R.id.copy, etc.
@Override
public boolean onTextContextMenuItem(int id)
除了小米设备。它似乎覆盖了上下文菜单,并且懒得调用常规方法。
有谁知道如何捕获这些事件?
答案 0 :(得分:0)
这个答案是关于小米设备没有正确调用onTextContextMenuItem的事实。一般要点是我们要将TextWatcher添加到EditText:
this.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// on non-Xiaomi devices this will be true
if(sOnTextContextMenuItemWorks) {
return;
}
// do the stuff you want to do
}
@Override
public void afterTextChanged(Editable s) { }
});
您可以使用静态布尔值sOnTextContextMenuItemWorks来避免在非小米设备上运行此代码。您将sOnTextContextMenuItemWorks的值初始化为false,然后在onTextContextMenuItem(不会在Xiaomi设备上调用)上,将sOnTextContextMenuItemWorks的值设置为true。
@Override
public boolean onTextContextMenuItem(int id) {
sOnTextContextMenuItemWorks = true;
// do the stuff you want to do
}
你不会抓到副本,但你会知道何时有粘贴或剪切。
如果有任何小米工程师读过这篇文章,请拨打onTextContextMenuItem !!!