在瀏覽器中,您可以長時間點擊URL。在我的WebView中,你不能。我可以如何做到這一點?在WebView中啓用longClick
回答
我有這個相同的問題。
不幸的是,我找不到使標準瀏覽器菜單選項出現的方法。你必須自己實現每一個。我所做的就是在WebView上註冊與activity.registerForContextMenu(webView)
的上下文菜單。然後,我的子類的WebView,並推翻了這種方法:
@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);
}
}
如果你想要做的比上下文菜單以外的東西,然後使用OnLongClickListener
。但是,如果要截取長按事件,則HitTestResult
是關鍵。這將允許您找出用戶點擊的內容並使用它進行操作。
我自己實際上還沒有實現「保存鏈接」,我只是將它作爲示例包含在這裏。但要做到這一點,你必須自己做所有的處理;您必須發出HTTP GET請求,接收響應,然後將其存儲在用戶的SD卡上。我無法直接調用瀏覽器應用程序的下載活動。您的「保存鏈接」代碼將如下所示:
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();
}
我可以在web視圖中啓用Javascript。然後使用onMouseDown()和onMouseUp()來確定點擊的持續時間。
你也可以在Javascript中創建彈出式菜單(不是標準菜單,但是你自己的)。
最後,您可以在Javascript和您的Android/Java代碼之間進行交互。
Javascript和Android應用程序之間簡單交互的示例。
http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/assets/demo.html
或者,您可能要推出的,而不是使用的WebView真正的瀏覽器。
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://example.com"));
startActivity(intent);
我能使用Javascript方法看到標準的Android菜單嗎? – 2010-08-10 15:28:09
我可以選擇並保留保存鏈接嗎?另外,當使用OvverideUrlLoading時這個工作是否會起作用? – 2010-08-10 15:29:12
我不知道彈出標準瀏覽器菜單的方式(除非你確實啓動了實際的瀏覽器) – LatinSuD 2010-08-12 19:39:50
我想你可以使用這樣的事情:
WebView yourWebView;
yourWebView.setLongClickable(true);
yourWebView.setOnLongClickListener(...);
這應該讓你捉對視圖長的點擊。之後你做了什麼......這取決於你!
我可以看到標準的Android菜單嗎?我可以選擇並保留保存鏈接嗎? – 2010-08-10 15:28:42
我只是想長時間複製URL數據。
通過參考我接受的答案,我寫了這個。
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. 在webview中啓用Javascript?
- 2. LongClick在標籤中
- 3. LongClick在標籤
- 4. 在longClick和選擇模式下Android webview fire自定義CAB
- 5. 在TabActivity中啓動WebView
- 6. 如何在支持MapMapFragment的OSMDroid的地圖上啓用LongClick
- 7. 在webview中啓用後退按鈕
- 8. Android:如何在android webview中啓用cookie。
- 9. 如何在androidstudio中啓用webview
- 10. 如何在WebView中啓用彈性?
- 11. 在webview中啓用水平滾動
- 12. 如何在WebView中啓用JavaScript
- 13. 如何在android webview中啓用cookie?
- 14. 如何在webview中啓用緩存android
- 15. 在WebView中啓用縮放android
- 16. 如何在Webview中啓用Flash插件?
- 17. 無法在android webview中啓用Cookie
- 18. TextView longclick listener
- 19. on longclick,contextmenu
- 20. 處理ListView longClick
- 21. 呼籲LongClick
- 22. ListView Click和LongClick
- 23. ListView項longClick
- 24. GridView - 片段 - LongClick
- 25. LongClick的OnTouchListener
- 26. 如何使用jQuery longclick?
- 27. 在longClick上設置選擇?
- 28. 如何禁用android中的listview的longclick
- 29. 如何在EditText爲LongClick時禁用edittext?
- 30. 的Android的WebView啓用Javascript
由於我在哪裏,我無法測試此代碼,但是您是否必須爲這些菜單選項編寫代碼?例如保存鏈接?如果是這樣,你是怎麼做到的? – 2010-08-10 17:17:58
是啊......這真的很不幸,但這是我能夠做到的唯一方法。我會在我的答案中添加更多的細節。 – 2010-08-10 18:28:30
我決定使用webView的全部原因是因爲該網站正在檢查引用者,並且我無法用HttpClient來欺騙它。有什麼方法可以檢查URL,並用網絡瀏覽器打開它,或者創建一個上下文菜單? – 2010-08-10 19:00:15