Android: l'Ouverture d'un ContextMenu de onLongPress dans la coutume WebView
Je suis en train d'essayer d'obtenir une mesure WebView qui affiche un ContextMenu quand il est pressé pour un temps plus long. Comme la valeur par défaut WebView classe affiche uniquement une ContextMenu lorsqu'un lien est longPressed, j'ai écrit ma propre classe pour remplacer ce comportement:
public class MyWebView extends WebView {
Context context;
GestureDetector gd;
public MyWebView(Context context, AttributeSet attributes) {
super(context, attributes);
this.context = context;
gd = new GestureDetector(context, sogl);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gd.onTouchEvent(event);
}
GestureDetector.SimpleOnGestureListener sogl =
new GestureDetector.SimpleOnGestureListener() {
public boolean onDown(MotionEvent event) {
return true;
}
public void onLongPress(MotionEvent event) {
//The ContextMenu should probably be called here
}
};
}
Cela fonctionne sans problèmes la appuyez de manière prolongée est détecté et le onLongPress méthode est appelée, mais je suis à une perte quand il s'agit de l'affichage de la ContextMenu. J'ai essayé de le faire de la manière habituelle dans mon Activité:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
MyWebView mwv = (MyWebView) findViewById(R.id.mwv);
registerForContextMenu(mwv);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context, menu);
}
Cependant, quand j'appuyez de manière prolongée sur le MyWebView dans l'émulateur, il ne se passe rien. Que dois-je faire un appel à partir de onLongPress() pour afficher le ContextMenu?
OriginalL'auteur jbaiter | 2011-02-03
Vous devez vous connecter pour publier un commentaire.
Activité Des Appels.openContextMenu(View v) dans onLongPress. Cela signifie avoir la MyWebView de conserver une référence à l'Activité.
OriginalL'auteur gngr44
Je l'ai eu à travailler maintenant, en s'appuyant sur gngr44 de la suggestion. J'ai fait mon activité de mettre en œuvre les
OnLongClickListener
classe et a fourni unonLongClick()
méthode qui ouvre le menu contextuel.Le code révisé:
La coutume WebView:
Mon Activité:
Même ici, webview perd sa capacité de défilement
Je pense que c'est parce que vous l'avez remplacé le onTouchEvent mais n'ont pas responsable de l'implémentation de la classe mère. @Override public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return true; return super.onTouchEvent(event); } Le code ci devrait faire l'affaire 🙂
OriginalL'auteur jbaiter
Au lieu d'accéder à l'activité à partir de votre point de vue, je vous conseille d'utiliser une Interface de votre point de Vue et la mise en œuvre de l'interface de votre Activité.
OriginalL'auteur thedjinni
J'ai remarqué que de temps en appuyant sur n'importe quoi dans l'émulateur nécessite BEAUCOUP de pressage, comme 5-7 secondes, par opposition à un régulière 1-2 dans la vraie vie. Assurez-vous que vous appuyez sur pendant au moins 10 secondes, sinon il me semble que rien ne se passe.
OriginalL'auteur Elad Avron