如何在Android原生的“编辑文本”上下文菜单中添加选项

9
有没有可能在用户长按任何编辑文本时,将某些内容添加到项目列表中?(剪切、复制、粘贴、选择文本、全选、输入法)我想要在这个菜单中添加另一个选项,但是我无法弄清楚如何实现。
这个问题的重复版本在这里,第一个答案的最后一条评论说“可能,但不太好看”。然后这个线程就停了下来。
我真的很想看到任何一个可行的例子,无论是简陋的还是不简陋的 :)

2
Android 6.0及以上版本现在支持此功能。https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-text-selection - PsyGik
3个回答

4

只有当EditText在您的活动中时,才能向现有的edittext上下文菜单添加更多菜单项。这可以通过onCreateContextMenu()来实现。

如果EditText不在您的活动中,则无法进行上述操作。

// 添加菜单项

EditText UserNameEditText = (EditText)findViewById(R.id.usernameEdittext);
registerForContextMenu(UserNameEditText);

// 覆盖上下文菜单

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
{
    super.onCreateContextMenu(menu, v, menuInfo);

    if (v.getId()==R.id.usernameEdittext) 
    {
        menu.add(0, 1, 0, "Fetch New Username");
        menu.add(0, 2, 0, "Check For Duplicate");
    }   
}

如果上下文菜单没有被调用,则您的EditText不在您的活动中。

3

两个答案都是肯定的!

首先,您需要创建一个实现OnCreateContextMenuListener接口的类,

public class CMenu implements OnCreateContextMenuListener {  

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {

    //Do Something , Like:

    menu.add(0, 1, 0, "copy");
    menu.add(0, 2, 0, "paste");
    }
}

那么。
editText.setOnCreateContextMenuListener(cMenu);

现在没问题了~


1
当用户长按任何编辑文本时,能否将某些内容添加到项目列表中?如果该EditText在您的活动中,则可以通过onCreateContextMenu()来实现。如果EditText不在您的活动中,则不行。首先,该帖子已经两年了,在Android领域几乎是永远。其次,我相当确定Haseman先生的评估是错误的。

你之前回答过蜂窝版本,现在呢?setCustomSelectionActionModeCallback呢? - Selvin
@Selvin:至少在早期,这是不可靠的。我尝试将其用于我的RichEditText,但发现一些制造商基本上忽略了该调用。我在过去几年中没有尝试过它,因此我不知道它是否在兼容性测试中得到更好的执行或者是否已经变得普遍安全可用。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接