2009-02-18 7 views
3

Когда вы долго нажимаете на что-то в Android, появляется контекстное меню. Я хочу добавить что-то в это контекстное меню для всех TextViews в системе.Android добавить пункт в глобальное контекстное меню

Например, система выполняет операции копирования и вставки. Я хотел бы добавить свой собственный и появиться в каждом приложении.

+1

Для тех, кто сейчас задает этот вопрос, ответ здесь: http://stackoverflow.com/questions/12995439/custom-cut-copy-action-bar-for-edittext-that-shows-text-selection-handles –

ответ

5

В настоящее время Android не поддерживает это, вы не можете переопределять или перехватывать функциональные возможности по всему миру на уровне системы без конкретной деятельности, реализующей намерение или деятельность, которые вы раскрываете. Даже в случае публикации намерения это не имело бы значения, если приложение не является потребителем ... и все базовые системные приложения, и, очевидно, все приложения до вашего времени не будут без обновления приложения для потребления.

В принципе, так как это невозможно, это невозможно.

Что именно вы пытаетесь выполнить в этом глобальном контекстном меню, какую-то глобальную функцию «Поиск» или «Отправить», которая проходит через ваше приложение?

+0

Спасибо. Я пытался сделать приложение для перевода, которое могло бы перевести любой TextView - вы бы нажали, выберите перевод, выберите язык, и он появится в текстовом виде. Я мог видеть, что это полезно и в других местах. Ах, хорошо. Спасибо, Isaac Waller http://www.isaacwaller.com/ –

+0

О да, это было бы хорошо .. вы должны опубликовать намерение для этого, чтобы люди могли подписаться, если бы он был доступен, я бы, вероятно, использовал его в своих приложениях только FYI , Удачи! –

+0

Возможно, это просто некрасиво: - \ – haseman

0

Хм; Я не знаю, можете ли вы расширить встроенные типы, например, например. Ruby (мои знания Java не такие большие).

Однако вы можете получить свой MyTextView из TextView. Затем заменить все TextViews в макетах, как это:

<TextView android:id="@+id/TextView01" /> 

в

<com.mydomain.mypackage.MyTextView android:id="@+id/TextView01" /> 

автоматически изменить тип всех этих полей.

Затем вам необходимо переопределить все конструкторы (особенно TextView(Context context, AttributeSet attrs)).

После этого все маятниковые надувные (автоматические или ручные) создадут этот тип без суеты.

Затем вы можете создавать/регистрировать обратные вызовы контекстного меню по своему усмотрению.

+2

Это работает только для TextViews в его приложениях/макетах. Он хочет что-то добавить ко всем приложениям, включая те, для которых у него нет авторства. Если TextView не использует какой-либо внутренний Intent для создания своего списка действий, то, похоже, нет возможности попасть туда. –

+0

Это не позволит вам, например. смотреть чей-то пароль в других приложениях? Если вы можете подключиться ко всем TextViews с помощью контекстного меню, можно было бы также сбрасывать его содержимое ... –

+0

В Android можно посмотреть чей-то пароль - с соответствующими разрешениями. –

0

Это может быть немного взломанным, но вы можете захватить ключ меню на уровне приложения/активности, проверить, является ли ваш текущий активный вид текстовым вводом, а затем создавать и отображать собственное настраиваемое всплывающее меню ,

Возможно, это немного сложно.

Если вы создадите/раздуйте TextView, вызовите setFocusable (false) на нем, а затем установите его в качестве активного вида . Активность по-прежнему будет принимать ключевые события. Вам нужно будет переслать все эти события (трекбол, касание, клавиша) в дерево просмотра вручную. (Внутри вашей функции onKeyDown вам нужно будет вызвать соответствующий метод «onKeyDown» для представления верхнего уровня). Вам действительно нужно заманивать понятие «фокус» и самостоятельно использовать его для правильного представления.

Хотя это немного уродливое, оно может дать желаемые результаты.

Это, однако, будет работать только в вашем собственном приложении. Предыдущие ответы правильны, поскольку это невозможно во всем телефоне.

+0

Как это работает с приложениями, которые вы еще не создали? Если вы откроете, скажите браузер и выберите текст навигации, не говоря уже о том, что на данный момент ваша деятельность исчезла. Как бы вы присоединяли и получали события? –

0

Нажмите кнопку «Поделиться» (дерево из трех точек) в меню выбора. Затем вы должны выбрать собственное приложение. К сожалению, не работает для содержимого входных полей.