Да, я думаю, что вы видите, есть меню HTC.
Графическое контекстное меню редактирования, которое вы видите, я считаю, новым для более поздних моделей Desire (Desire HD и Desire Z). То, что я вижу (с вашим кодом) в своем оригинальном Desire, представляет собой всплывающее текстовое меню с заголовком HeaderTitle, установленным как «Редактировать текст» и список, например «Выбрать все», «Копировать», «Вставить» и т. Д., Но я также см. запись «Test menu».
Мне кажется, что при вызове onCreateContextMenu() для таких вещей, как ListView и ImageView, объект «меню», переданный этому вызову, по умолчанию не заполняется. Однако в случае с EditText он предназначен для взаимодействия с буфером обмена, и поэтому система предоставляет предварительно заполненное меню на основе состояния содержимого EditText (например, если текст выбран, укажите параметр «Копировать»; если в буфере обмена есть текст, поставьте опцию «Вставить» и т. д.).
Я был в состоянии получить контекстное меню без опций «Edit», очистив заголовок и содержимое путем изменения кода ...
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo)
{
Log.v(TAG, "Creating context menu for view="+view);
// Clear current contents
menu.clearHeader();
menu.clear();
menu.setHeaderTitle("TEST MENU");
menu.add(Menu.NONE, Menu.FIRST+1, Menu.NONE, "Test menu");
super.onCreateContextMenu(menu, view, menuInfo);
}
Тот факт, что вы получаете графическое меню (возможно, полученный из ContextMenu) предполагает, что вышеупомянутый метод не будет работать, поэтому единственным способом его создания было бы создать экземпляр собственного объекта ContextMenu, а не использовать тот, который был передан onCreateContextMenu().
Я тщательно отлажена/вошли все вокруг моего кода, но до сих пор Activity.onCreateContextMenu() даже не называется
Это кажется очень странным, - очевидно, она вызывается для меня, как я был в состоянии чтобы играть с ContextMenu, который передается ему.
EDIT 1: Переосмыслив это, вы упоминаете, что вы нажимаете «EditText» - это то, что вы на самом деле делаете (короткое касание вниз, а затем пальцем вверх)?
Чтобы получить мой ContextMenu, я должен использовать «длинный» щелчок (нажмите и удерживайте в течение 1 секунды). Когда я просто коснусь моего EditText, появляется «мягкая» клавиатура или, если клавиатура уже видна, курсор просто перемещается в другое место в поле EditText.
Очевидно, что у Desire Z есть физическая клавиатура, и это может привести к немногому поведению (а также к желанию Z, имеющему другую версию интерфейса Sense для моего желания).
Тот факт, что onCreateContextMenu() никогда не вызывается для вас, может означать только одно, и именно то, что вы видите, НЕ является контекстом и является другим типом всплывающего пользовательского интерфейса. По крайней мере, это единственный логический способ понять это.
Можете ли вы подтвердить, что «длинная» печать по-прежнему не создает ContextMenu для вас или вы долго пользовались долгой печатью?
Если вы испробовали длительное нажатие, то попробуйте изменить код следующим образом ...
Реализовать OnClickListener
public class MyActivity extends Activity
implements OnLongClickListener {
Установите приемник для EditText в OnCreate ...
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText=(EditText)findViewById(R.id.editText);
this.registerForContextMenu(editText);
editText.setOnLongClickListener(this); // <-- ADD THIS
}
Добавить код слушателя ...
@Override
public boolean onLongClick(View arg0) {
android.util.Log.v(TAG, "onLongClick() called");
if (arg0 == editText)
{
android.util.Log.v(TAG, "arg0 == editText");
Toast.makeText(this, "onLongClick intercepted", 2000).show();
return true;
}
else
{
android.util.Log.v(TAG, "arg0 != editText");
return false;
}
}
Делая это, я смог перехватить длинную прессу и, возвращая «истинный» из onLongClick() Я указывающий на систему, что я «потребляются» событие и он не передается, чтобы вызвать создание моего ContextMenu.
Если это не работает для вас, и кратковременное нажатие по-прежнему вызывает появление всплывающего окна, попробуйте выполнить OnClickListener и вместо этого переопределить onClick().
Объект упражнения состоит в том, что если вы можете перехватить все, что вызывает создание всплывающего окна, которое вы видите, вы можете вручную создать и показать свой собственный ContextMenu.
Не могли бы вы разместить снимок экрана контекстного меню? – CommonsWare
Мне также интересно посмотреть скриншот того, что вы видите. У меня есть оригинальное Desire, и я просто попробовал это с моим телефоном, и я правильно получил свое собственное контекстное меню с заголовком/заголовком заголовка и моими вариантами, когда я долгое время нажимаю EditText. – Squonk
Как только у меня будет доступ к компьютеру с поддержкой отладки USB, я сделаю скриншоты.Я предполагаю, что это произойдет сегодня вечером (из Москвы/России) – barmaley