Показать контекстное меню, когда ссылка долго нажимается в TextView

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


person Al.    schedule 18.04.2010    source источник
comment
Вы также можете просмотреть этот вопрос для реализация копирования в контекстном меню. У него нет ответа на банкомат, но я работаю над его поиском   -  person Casebash    schedule 28.05.2010


Ответы (1)


Вы можете просто использовать 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

}
person stealthcopter    schedule 19.04.2010
comment
Я хочу отображать контекстное меню только при длительном нажатии URL-адреса, поэтому я могу указать некоторые параметры, характерные для этой ссылки, такие как «Копировать» и «Поделиться». - person Al.; 20.04.2010
comment
@Al: если вы зарегистрируете контекстное меню, оно появится только при длительном нажатии - person Casebash; 28.05.2010