Oui, je pense que ce que vous voyez il y a un menu HTC.
Le menu contextuel d'édition graphique que vous voyez est, je crois, nouveau sur les modèles Desire plus récents (Desire HD et Desire Z). Ce que je vois (avec votre code) sur mon Desire original est un menu contextuel avec le HeaderTitle défini comme 'Edit text' et une liste comme 'Select all', 'Copy', 'Paste' etc. MAIS, je voyez aussi une entrée disant 'Test menu'.
Il me semble que lorsque onCreateContextMenu() est appelé pour des choses comme ListView et ImageView, l'objet 'menu' transmis à cet appel n'est pas pré-rempli par défaut. Dans le cas d'un EditText, cependant, il est conçu pour interagir avec le Presse-papiers et en tant que tel le système fournit un menu pré-rempli basé sur l'état de contenu EditText (par exemple, si le texte est sélectionné, fournir une option 'Copier'; s'il y a du texte dans le Presse-papiers, donnez une option "Coller", ... et ainsi de suite).
j'ai pu obtenir un menu contextuel sans les options « modifier » en effaçant l'en-tête et le contenu en modifiant votre code ...
@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);
}
Le fait que vous obtenez un menu graphique (peut-être dérivé à partir de ContextMenu) suggère que la technique ci-dessus ne fonctionnera pas alors la seule façon de contourner ce problème serait d'instancier votre propre objet ContextMenu plutôt que d'utiliser celui qui est passé à onCreateContextMenu().
J'ai beaucoup débogué/tout autour de mon code connecté, mais toujours Activity.onCreateContextMenu() même pas appelé
Cela semble très étrange - de toute évidence, il est appelé pour moi comme je l'ai été en mesure pour jouer avec le ContextMenu qui lui est passé. En repensant à cela, vous mentionnez que vous appuyez sur le bouton EditText - est-ce ce que vous êtes réellement en train de faire (un appui court puis un appui vers le haut)?
Pour obtenir mon ContextMenu, je dois utiliser une pression longue/cliquer (maintenir enfoncé pendant environ 1 seconde). Quand je tape simplement/touche mon EditText, le clavier 'soft' apparaît ou, si le clavier est déjà visible, le curseur est simplement déplacé à une position différente dans la zone EditText.
De toute évidence, le Desire Z a un clavier physique et cela peut provoquer un comportement légèrement différent (ainsi que le Desire Z ayant une version différente de l'interface de détection à mon désir). Le fait que onCreateContextMenu() ne soit jamais appelé ne peut signifier qu'une seule chose et que, ce que vous voyez n'est pas un ContextMenu et est un autre type d'élément d'interface utilisateur contextuel. Au moins, c'est la seule façon logique de le comprendre.
Pouvez-vous confirmer qu'un appui long ne crée pas de ContextMenu pour vous ou avez-vous utilisé une pression longue tout au long?
Si vous avez essayé une longue pression puis essayer de modifier le code comme suit ...
Mettre en œuvre OnClickListener
public class MyActivity extends Activity
implements OnLongClickListener {
Réglez l'auditeur pour editText dans 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
}
Ajouter le code d'écoute ...
@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;
}
}
En faisant cela, je suis en mesure d'intercepter la longue presse et, en retournant « true » de onLongClick() J'indiquant au système que je suis « consumé » l'événement et il n'est pas transmis pour provoquer la création de mon ContextMenu.
Si cela ne fonctionne pas pour vous et qu'un raccourci entraîne toujours l'apparition de cette fenêtre, essayez d'implémenter OnClickListener et de surcharger onClick() à la place.
L'objet de l'exercice est que si vous pouvez intercepter tout ce qui provoque la création de la fenêtre contextuelle que vous voyez, vous pouvez ensuite créer manuellement et afficher votre propre ContextMenu.
Pourriez-vous poster une capture d'écran du menu contextuel? – CommonsWare
Je suis également curieux de voir une capture d'écran de ce que vous voyez. J'ai un désir original et je viens de l'essayer avec mon téléphone et je reçois correctement mon propre menu contextuel avec l'en-tête/titre et mes choix quand j'appuie longuement sur mon EditText. – Squonk
Dès que j'aurai accès au PC de débogage USB activé, je ferai des captures d'écran.Je suppose qu'il se passera aujourd'hui soir (de Moscou/Russie temps) – barmaley