Tôi hiện đang cố gắng để có một WebView tùy chỉnh hiển thị ContextMenu khi nó được nhấn trong một thời gian dài hơn. Như lớp WebView mặc định chỉ hiển thị một ContextMenu khi một liên kết được longPressed, tôi đã viết lớp của riêng tôi để ghi đè lên hành vi này:Android: Mở một ContextMenu từ onLongPress trong WebView tùy chỉnh
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
}
};
}
này hoạt động mà không vấn đề nhấn và giữ được phát hiện và phương pháp onLongPress được gọi, tuy nhiên tôi bị mất khi nói đến việc hiển thị ContextMenu. Tôi đã thử thực hiện theo cách thông thường trong Hoạt động của mình:
@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);
}
Tuy nhiên, khi tôi nhấn LongMyWebView trong trình mô phỏng, không có gì xảy ra. Tôi phải gọi gì từ onLongPress() để hiển thị ContextMenu?
Điều này làm cho menu ngữ cảnh hoạt động. Tuy nhiên, tôi không thể cuộn webview được nữa. Trên thực tế, mọi liên lạc sẽ bật lên menu ngữ cảnh. Bất kỳ ý tưởng làm thế nào để làm cho nó hoạt động perperly? – newman
Tương tự ở đây, webview mất khả năng cuộn của nó – KingFu
Tôi nghĩ rằng đó là bởi vì bạn đã ghi đè onTouchEvent nhưng chưa triển khai siêu lớp. @Override công khai boolean onTouchEvent (sự kiện MotionEvent) { nếu (gestureDetector.onTouchEvent (sự kiện)) trả về true; trả lại super.onTouchEvent (sự kiện); } Mã cho nên làm các trick :) –