android粘贴事件

Bud*_*ril 7 events android paste

有没有办法在我的应用程序中捕获粘贴事件?当我在editText上长按并从上下文菜单中选择粘贴时,我必须做一些事情.谢谢

zir*_*ael 5

创建位置为“粘贴”的 menu.xml

将 contextMenu 注册到您的 EditText

EditText et=(EditText)findViewById(R.id.et);
registerForContextMenu(et);
Run Code Online (Sandbox Code Playgroud)

创建上下文菜单

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);    
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;  
    menu.setHeaderTitle("title");
}
Run Code Online (Sandbox Code Playgroud)

创建方法菜单 onClick

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();     
    switch (item.getItemId()) {
    case R.id.paste:      
        break;     
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道这个线程很旧,但这不是用您自己的上下文菜单替换内置上下文菜单吗?如果您喜欢该菜单,但只想在粘贴发生时收到通知怎么办? (10认同)

Gui*_*n70 5

您应该在接收粘贴操作的控件上实现TextWatcher侦听器.

TextWatcher类提供的方法来处理的OnChange,BeforeChange任何可编辑的改动后.例如:

private void pasteEventHandler() {
    ((EditText)findViewById(R.id.txtOutput))
            .addTextChangedListener(new TextWatcher() {

                public void afterTextChanged(Editable s) {
                    Log.d(TAG, "Text changed, refreshing view.");
                    refreshView();
                }

                public void beforeTextChanged(CharSequence s, int start,
                        int count, int after) {
                }

                public void onTextChanged(CharSequence s, int start,
                        int before, int count) {
                }
            });
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这并不能回答用户的问题。有了它,您将听到打字、擦除、粘贴等操作 (3认同)
  • 只是一个迂腐的评论:投射到TextView就足够了. (2认同)