Android добавить элемент в глобальное контекстное меню - PullRequest
4 голосов
/ 18 февраля 2009

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

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

Ответы [ 5 ]

5 голосов
/ 21 февраля 2009

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

По сути, это невозможно.

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

0 голосов
/ 03 января 2019

Добавьте intent-filter в ваш файл android-manifest.xml:

<activity
   android:name=".ProcessTextActivity"
   android:label="@string/process_text_action_name">
  <intent-filter>
     <action android:name="android.intent.action.PROCESS_TEXT" />
     <category android:name="android.intent.category.DEFAULT" />
     <data android:mimeType="text/plain" />
 </intent-filter>
</activity>

Получить выделенный пользователем текст в активности вашего приложения в методе onCreate ():

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.process_text_main);
    CharSequence text = getIntent()
      .getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT);
    // process the text
}

Больше информации в статье на средних .

Спасибо за пользователя: YungBlade

Его ответ на ru.stackoverflow.com

0 голосов
/ 18 ноября 2017

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

0 голосов
/ 21 февраля 2009

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

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

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

Немного отвратительно, но может дать желаемый результат.

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

0 голосов
/ 18 февраля 2009

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

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

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

до

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...