onTextContextMenuItem在小米设备上没有调用EditText

时间:2015-02-28 00:19:31

标签: android

我有一个继承自EditText的类。我重写了onTextContextMenuItem的行为来处理对编辑文本上下文菜单(即已剪切,粘贴,复制的菜单)的点击。

在大多数设备上,当用户选择其中一个选项时,将调用此回调:

// id can be android.R.id.paste, android.R.id.copy, etc.
@Override
public boolean onTextContextMenuItem(int id)

除了小米设备。它似乎覆盖了上下文菜单,并且懒得调用常规方法。

有谁知道如何捕获这些事件?

1 个答案:

答案 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 !!!