Attualmente sto cercando di ottenere una visualizzazione Web personalizzata che visualizza un ContextMenu quando viene premuto per un tempo più lungo. Come la classe predefinita WebView visualizza solo un ContextMenu quando un link viene longPressed, ho scritto la mia classe per ignorare questo comportamento:Android: apertura di un menu contestuale da onLongPress in WebView personalizzata
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
}
};
}
Questo funziona senza problemi la longpress viene rilevato e il metodo onLongPress viene chiamato, comunque sto in perdita quando si tratta di visualizzare il ContextMenu. Ho provato a farlo nel solito modo nella mia attività:
@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);
}
Tuttavia, quando ho longpress il MyWebView nell'emulatore, non accade nulla. Cosa devo chiamare da onLongPress() per visualizzare ContextMenu?
Questo rende il menu di scelta rapida. Tuttavia, non riesco più a scorrere la visualizzazione Web. In realtà, qualsiasi tocco farà apparire il menu contestuale. Qualche idea su come farlo funzionare per sempre? – newman
Lo stesso qui, la webview perde la sua capacità di scorrimento – KingFu
Penso che sia perché hai sovrascritto l'onTouchEvent ma non hai implementato la superclasse. @Override public booleano onTouchEvent (evento MotionEvent) { if (gestureDetector.onTouchEvent (evento)) return true; return super.onTouchEvent (evento); } Il codice indicato dovrebbe fare il trucco :) –