Показать контекстное меню, когда ссылка долго нажата в TextView - PullRequest
5 голосов
/ 18 апреля 2010

У меня есть TextView с MovementMethod, установленным на LinkMovementMethod. Текст, добавленный к TextView, представляет собой комбинацию обычного текста и URL-адресов. Для URL я хотел бы предложить контекстное меню, когда URL долго нажимается для выполнения таких действий, как копирование адреса. Я посмотрел на исходный код LinkMovementMethod, но, похоже, он не имеет длинного нажатого связанного кода, который я мог бы переопределить. Любые идеи о том, как обойти это достижение?

1 Ответ

13 голосов
/ 20 апреля 2010

Вы можете просто использовать registerForContextMenu, например:

    TextView tv = new TextView(this);
    registerForContextMenu(tv);

, а затем переопределить onCreateContextMenu для создания меню

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
            // Create your context menu here
    menu.setHeaderTitle("Context Menu");
    menu.add(0, v.getId(), 0, "Action 1");        
}

, где вы можете использовать идентификатор представления для передачи событиям, которые происходят при нажатии пункта меню, чтобы определить, какое представление вызвало событие.

@Override
public boolean onContextItemSelected(MenuItem item) {
    // Call your function to preform for buttons pressed in a context menu
    // can use item.getTitle() or similar to find out button pressed
    // item.getItemID() will return the v.getID() that we passed before

}
...