Tak, myślę, że to, co widzisz tam jest menu HTC.
Widoczne menu kontekstowe edycji graficznej jest, jak sądzę, nowym dla nowszych modeli Desire (Desire HD i Desire Z). To, co widzę (z twoim kodem) na moim oryginalnym Desire, to menu podręczne z ustawieniem HeaderTitle jako "Edit text" i lista taka jak "Select all", "Copy", "Paste" itd. ALE, I zobacz także wpis z napisem "Menu testu".
Wydaje mi się, że po wywołaniu metody onCreateContextMenu() w takich obiektach, jak ListView i ImageView, obiekt "menu" przekazany do tego połączenia nie jest domyślnie wypełniany. W przypadku wyłączenia EditText jest on jednak zaprojektowany do interakcji ze Schowkiem i jako taki dostarcza wstępnie wypełnione menu oparte na stanie zawartości EditText (np. Jeśli zaznaczono tekst, należy podać opcję "Kopiuj"; jeśli tekst w schowku zawiera opcję "Wklej", ... itd.).
udało mi się dostać do menu kontekstowego bez opcji „edytuj” czyszcząc nagłówek i treść modyfikując swój kod ...
@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);
}
Fakt dostajesz menu graficznego (prawdopodobnie pochodzi z ContextMenu) sugeruje, że powyższa technika nie zadziała, więc jedyną metodą jest utworzenie instancji własnego obiektu ContextMenu zamiast użycia obiektu onCreateContextMenu().
Mam dokładnie debugowany/zalogowany wszystko wokół mojego kodu, ale nadal Activity.onCreateContextMenu() nawet nie nazywa
To wydaje się bardzo dziwne - oczywiście to miano dla mnie jak udało mi bawić się z ContextMenu, które jest do niego przekazywane.
EDIT 1: Ponownie przemyślając to, wspominasz, że "puknij" w EditText - czy to właśnie robisz (krótkie dotknięcie, a następnie podniesienie palca)?
Aby dostać moje ContextMenu, muszę użyć "długiego" naciśnięcia/kliknięcia (dotknij i przytrzymaj przez około 1 sekundę). Kiedy po prostu dotknę/dotknę mojego EditText pojawi się "miękka" klawiatura lub, jeśli klawiatura jest już widoczna, kursor zostanie po prostu przesunięty w inne miejsce w polu EditText.
Oczywiście Desire Z ma fizyczną klawiaturę, która może powodować nieco inne zachowanie (podobnie jak Desire Z ma inną wersję interfejsu Sense UI do mojego Desire).
Fakt, że metoda onCreateContextMenu() nigdy nie jest wywoływana, może oznaczać tylko jedną rzecz, a mianowicie to, co widzisz NIE jest ContextMenu i jest innym elementem popup elementu interfejsu użytkownika. Przynajmniej to jest jedyny logiczny sposób, w jaki mogę go zrozumieć.
Czy możesz potwierdzić, że "długie" naciśnięcie wciąż nie tworzy dla Ciebie Menu kontekstowego lub czy używasz długiego naciśnięcia od początku?
Jeśli próbowałeś długie naciśnięcie następnie spróbuj modyfikacji kodu następująco ...
Wdrożenie OnClickListener
public class MyActivity extends Activity
implements OnLongClickListener {
Ustaw słuchacza do EditText w 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
}
Dodaj kod odbiornika ...
@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;
}
}
Dzięki temu jestem w stanie przechwycić i naciśnij długo, wracając „true” z onLongClick() Jestem wskazuje systemowi, że mam „konsumowane” zdarzenia i nie zostanie przekazany, aby spowodować utworzenie mojego ContextMenu.
Jeśli to nie działa, a krótkie naciśnięcie powoduje wyświetlenie tego okienka, spróbuj zaimplementować OnClickListener i zastąpić onClick().
Celem ćwiczenia jest to, że jeśli możesz przechwycić wszystko, co powoduje powstanie wyskakującego okienka, możesz ręcznie utworzyć i pokazać własne menu kontekstowe.
Czy możesz opublikować zrzut ekranu menu kontekstowego? – CommonsWare
Jestem również ciekawy zrzutu ekranu z tego, co widzisz. Mam oryginalny Desire i właśnie wypróbowałem to z moim telefonem i poprawnie dostaję moje własne menu kontekstowe z ikoną nagłówka/tytułu i moimi wyborami, kiedy długo naciskam mój EditText. – Squonk
Jak tylko będę miał dostęp do komputera obsługującego debugowanie USB, wykonam zrzuty ekranu.Przypuszczam, że stanie się to dzisiaj wieczorem (czasu moskiewsko-rosyjskiego) – barmaley