Trong trình duyệt, bạn có thể longClick vào URL. Trong WebView của tôi, bạn không thể. Làm thế nào tôi có thể làm cho nó để bạn có thể?Bật longClick trong WebView
Trả lời
Tôi gặp vấn đề tương tự.
Thật không may, tôi không thể tìm thấy cách để làm cho các tùy chọn menu trình duyệt chuẩn xuất hiện. Bạn phải tự mình thực hiện. Những gì tôi đã làm là đăng ký WebView cho các menu ngữ cảnh với activity.registerForContextMenu(webView)
. Sau đó, tôi subclassed WebView và overrode phương pháp này:
@Override
protected void onCreateContextMenu(ContextMenu menu) {
super.onCreateContextMenu(menu);
HitTestResult result = getHitTestResult();
MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
// do the menu action
return true;
}
};
if (result.getType() == HitTestResult.IMAGE_TYPE ||
result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
// Menu options for an image.
//set the header title to the image url
menu.setHeaderTitle(result.getExtra());
menu.add(0, ID_SAVEIMAGE, 0, "Save Image").setOnMenuItemClickListener(handler);
menu.add(0, ID_VIEWIMAGE, 0, "View Image").setOnMenuItemClickListener(handler);
} else if (result.getType() == HitTestResult.ANCHOR_TYPE ||
result.getType() == HitTestResult.SRC_ANCHOR_TYPE) {
// Menu options for a hyperlink.
//set the header title to the link url
menu.setHeaderTitle(result.getExtra());
menu.add(0, ID_SAVELINK, 0, "Save Link").setOnMenuItemClickListener(handler);
menu.add(0, ID_SHARELINK, 0, "Share Link").setOnMenuItemClickListener(handler);
}
}
Nếu bạn muốn làm một cái gì đó khác hơn là một menu ngữ cảnh, sau đó sử dụng một OnLongClickListener
. Tuy nhiên, bạn muốn chặn sự kiện nhấp chuột dài, HitTestResult
là chìa khóa. Đó là những gì sẽ cho phép bạn tìm ra những gì người dùng đã nhấp vào và làm điều gì đó với nó.
Tôi chưa thực sự triển khai "Lưu liên kết", tôi chỉ đưa nó làm ví dụ ở đây. Nhưng để làm như vậy bạn sẽ phải tự mình xử lý tất cả; bạn phải thực hiện yêu cầu HTTP GET, nhận phản hồi và sau đó lưu trữ nó ở đâu đó trên thẻ SD của người dùng. Không có cách nào mà tôi biết để trực tiếp gọi hoạt động tải xuống của ứng dụng Trình duyệt. Mã "Lưu liên kết" của bạn sẽ trông giống như sau:
HitTestResult result = getHitTestResult();
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(result.getExtra());
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
URL url = new URL(result.getExtra());
//Grabs the file part of the URL string
String fileName = url.getFile();
//Make sure we are grabbing just the filename
int index = fileName.lastIndexOf("/");
if(index >= 0)
fileName = fileName.substring(index);
//Create a temporary file
File tempFile = new File(Environment.getExternalStorageDirectory(), fileName);
if(!tempFile.exists())
tempFile.createNewFile();
InputStream instream = entity.getContent();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
//Read bytes into the buffer
ByteArrayBuffer buffer = new ByteArrayBuffer(50);
int current = 0;
while ((current = bufferedInputStream.read()) != -1) {
buffer.append((byte) current);
}
//Write the buffer to the file
FileOutputStream stream = new FileOutputStream(tempFile);
stream.write(buffer.toByteArray());
stream.close();
}
Tôi sẽ bật Javascript trong chế độ xem web. Sau đó, sử dụng onMouseDown() và onMouseUp() để xác định thời lượng nhấp chuột.
Bạn cũng có thể tạo menu bật lên trong Javascript (không phải menu chuẩn, mà là của riêng bạn).
Cuối cùng, bạn có thể tương tác giữa Javascript và mã Android/Java của mình.
Ví dụ về tương tác đơn giản giữa Javascript và ứng dụng Android.
http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/assets/demo.html
Ngoài ra, bạn có thể muốn để khởi động trình duyệt thực sự thay vì sử dụng một WebView.
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://example.com"));
startActivity(intent);
Tôi có thể xem Menu Android chuẩn bằng phương pháp Javascript không? –
Tôi có thể chọn và chọn và chỉ giữ liên kết Lưu không? Ngoài ra, điều này sẽ làm việc khi sử dụng một OvverideUrlLoading? –
Tôi không biết cách bật trình đơn trình duyệt chuẩn (trừ khi bạn khởi động trình duyệt thực) – LatinSuD
tôi sẽ nghĩ rằng bạn có thể sử dụng một cái gì đó như thế này:
WebView yourWebView;
yourWebView.setLongClickable(true);
yourWebView.setOnLongClickListener(...);
Điều đó sẽ cho phép bạn bắt nhấp chuột dài trên xem. Những gì bạn làm sau đó ... đó là tùy thuộc vào bạn!
Tôi có thể thấy menu Android chuẩn không? Tôi có thể chọn và chọn và chỉ giữ liên kết lưu không? –
Tôi chỉ muốn sao chép dữ liệu URL khi nhấp chuột dài.
Bằng cách tham khảo từ câu trả lời được chấp nhận, tôi đã viết điều này.
registerForContextMenu(webView);
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
WebView webView = (WebView) v;
HitTestResult result = webView.getHitTestResult();
if (result != null) {
if (result.getType() == HitTestResult.SRC_ANCHOR_TYPE) {
String linkToCopy = result.getExtra();
copyToClipboard(linkToCopy, AppConstants.URL_TO_COPY);
}
}
}
- 1. bật/tắt zoom trong Android WebView
- 2. WebView textarea không bật lên bàn phím
- 3. android: webview bên trong hộp thoại hoặc bật lên
- 4. Sự kiện LongClick cũng kích hoạt Sự kiện nhấp
- 5. Làm cách nào để bật Thanh địa chỉ trong Android WebView?
- 6. Caching trong JavaFX WebView
- 7. Caching trong webview Android
- 8. iphone: Bật lên nút trong UIWebView
- 9. Android WebView Javascript getSelection
- 10. Tải xuống tệp bên trong WebView
- 11. JavaScript không hoạt động trong Android WebView
- 12. Textfield trong WebView trong Android bị ẩn bởi bàn phím
- 13. WebView Xoay/kéo Google Maps trong Qt5
- 14. Trợ năng và Android WebView
- 15. OSX OAuth redirect_uri trong WebView
- 16. Ngăn Flash trong Cocoa WebView
- 17. Ẩn thanh cuộn trong WebView
- 18. Mở PDF trong một WebView
- 19. Android singleTap/OnClick trong WebView
- 20. Cách xử lý Xác thực cơ bản trong WebView
- 21. Hiển thị tiến trình trong cửa sổ bật lên
- 22. Làm cách nào để bật điều khiển thu phóng và phóng to thu nhỏ trong một WebView?
- 23. Bật cuộn ngang trong chế độ xem web
- 24. webview với toàn màn hình trong android
- 25. Android webview bên trong một dịch vụ?
- 26. cocoa : Cách tạo nền trong suốt webView?
- 27. YouTube Video không phát trong WebView - Android
- 28. Hủy tải trong WebView trên Android
- 29. Âm thanh Html trong Android Webview
- 30. Phát hiện webview trong Android với Javascript
Tôi chưa thể kiểm tra mã này, vì tôi đang ở đâu, nhưng bạn có phải viết mã cho các tùy chọn trình đơn đó không? ví dụ. Lưu liên kết? Nếu vậy, làm thế nào bạn làm điều đó? –
Vâng ... nó thực sự không may, nhưng đó là cách duy nhất tôi đã có thể làm điều đó. Tôi sẽ thêm một số chi tiết vào câu trả lời của tôi. –
Toàn bộ lý do tôi quyết định sử dụng webView là vì trang web đã kiểm tra người giới thiệu và tôi không thể giả mạo nó bằng HttpClient. Có cách nào để kiểm tra URL và mở nó bằng Trình duyệt web hay tạo menu ngữ cảnh không? –