Aktualnie próbuję uzyskać niestandardowy widok WebView, który wyświetla menu kontekstowe, gdy zostanie naciśnięty przez dłuższy czas. Jak tylko domyślna klasa WebView wyświetla ContextMenu gdy związek jest longPressed pisałem moje własne klasy aby przesłonić to zachowanie:Android: Otwieranie menu kontekstowego z onLongPress w niestandardowym widoku WebView
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
}
};
}
To działa bez problemów, longPress jest wykrywany i metoda onLongPress nazywa, jednak jestem ze stratą, jeśli chodzi o wyświetlanie ContextMenu. Próbowałem robi to zwykły sposób, w mojej działalności:
@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);
}
Jednak, kiedy longPress się MyWebView w emulatorze, nic się nie dzieje. Co muszę wywołać z onLongPress(), aby wyświetlić ContextMenu?
Dzięki temu menu kontekstowe działa. Jednak nie mogę już przewijać widoku strony. W rzeczywistości każdy dotyk wyświetli menu kontekstowe. Masz pomysł, jak sprawić, by działał on perwersyjnie? – newman
To samo tutaj, przeglądanie stron internetowych traci zdolność przewijania. – KingFu
Myślę, że to dlatego, że nadpisałeś onTouchEvent, ale nie masz implementacji nadklasy. @Override public boolean onTouchEvent (zdarzenie MotionEvent) { if (gestureDetector.onTouchEvent (event)) return true; return super.onTouchEvent (zdarzenie); } Podany kod powinien wystarczyć :) –