在浏览器中,您可以长时间点击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. LongClick在标签中
- 2. LongClick在标签
- 3. 在TabActivity中启动WebView
- 4. 如何在Webview中启用Flash插件?
- 5. 在webview中启用水平滚动
- 6. 无法在android webview中启用Cookie
- 7. 在WebView中启用缩放android
- 8. Android:如何在android webview中启用cookie。
- 9. 如何在WebView中启用JavaScript
- 10. TextView longclick listener
- 11. GridView - 片段 - LongClick
- 12. ListView Click和LongClick
- 13. 处理ListView longClick
- 14. on longclick,contextmenu
- 15. LongClick的OnTouchListener
- 16. ListView项longClick
- 17. 如何禁用android中的listview的longclick
- 18. 如何在Android的WebView上启用WebKitDeveloperExtras
- 19. 启用点击webview中的链接
- 20. 如何在Android应用上的WebView中启用深度链接?
- 21. 如何在Android WebView的首选项中启用/禁用Flash?
- 22. 如何在Appium中启用和使用WebView for iOS自动化
- 23. 禁用/启用软键盘为webview
- 24. 在jQuery Mobile中使用Google地图的longclick/taphold?
- 25. 如何在WebView中启用触觉反馈(振动)?
- 26. 如何在WebView中启用水平滚动条
- 27. 如何在javafx WebView中启用HTML5本地存储
- 28. 机器人 - 如何在Android的WebView中启用地址栏
- 29. 如何在Xamarin.Forms中的Android WebView上启用本地存储
- 30. 如何在android webview中启用默认高亮菜单?
由于我在哪里,我无法测试此代码,但是您是否必须为这些菜单选项编写代码?例如保存链接?如果是这样,你是怎么做到的? – 2010-08-10 17:17:58
是啊......这真的很不幸,但这是我能够做到的唯一方法。我会在我的答案中添加更多的细节。 – 2010-08-10 18:28:30
我决定使用webView的全部原因是因为该网站正在检查引用者,并且我无法用HttpClient来欺骗它。有什么方法可以检查URL,并用网络浏览器打开它,或者创建一个上下文菜单? – 2010-08-10 19:00:15