如何在android中的webview上获取onclick事件? [英] How can I get onclick event on webview in android?
问题描述
我想知道用户何时点击了 webview 而不是超链接.在那次单击时,我想显示/隐藏包含 web 视图的活动视图.有什么建议吗?
I want to know when the user clicks on webview but not on a hyperlink. On that click I want to show/hide a view of my activity that holds a webview. Any suggestion?
推荐答案
我看了看这个,发现 WebView
似乎没有将点击事件发送到 OnClickListener代码>.如果有人能证明我错了或告诉我原因,那么我很想听听.
I took a look at this and I found that a WebView
doesn't seem to send click events to an OnClickListener
. If anyone out there can prove me wrong or tell me why then I'd be interested to hear it.
我确实发现WebView
会将触摸事件发送到OnTouchListener
.它确实有自己的 onTouchEvent
方法,但我似乎只使用该方法获得了 MotionEvent.ACTION_MOVE
.
What I did find is that a WebView
will send touch events to an OnTouchListener
. It does have its own onTouchEvent
method but I only ever seemed to get MotionEvent.ACTION_MOVE
using that method.
因此,鉴于我们可以在已注册的触摸事件侦听器上获取事件,剩下的唯一问题是如何在用户单击 URL 时规避您希望为触摸执行的任何操作.
So given that we can get events on a registered touch event listener, the only problem that remains is how to circumvent whatever action you want to perform for a touch when the user clicks a URL.
这可以通过一些花哨的 Handler
步法来实现,方法是发送触摸的延迟消息,然后如果触摸是由用户单击 URL 引起的,则删除这些触摸消息.
This can be achieved with some fancy Handler
footwork by sending a delayed message for the touch and then removing those touch messages if the touch was caused by the user clicking a URL.
这是一个例子:
public class WebViewClicker extends Activity implements OnTouchListener, Handler.Callback {
private static final int CLICK_ON_WEBVIEW = 1;
private static final int CLICK_ON_URL = 2;
private final Handler handler = new Handler(this);
private WebView webView;
private WebViewClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view_clicker);
webView = (WebView)findViewById(R.id.web);
webView.setOnTouchListener(this);
client = new WebViewClient(){
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
handler.sendEmptyMessage(CLICK_ON_URL);
return false;
}
};
webView.setWebViewClient(client);
webView.setVerticalScrollBarEnabled(false);
webView.loadUrl("http://www.example.com");
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.web && event.getAction() == MotionEvent.ACTION_DOWN){
handler.sendEmptyMessageDelayed(CLICK_ON_WEBVIEW, 500);
}
return false;
}
@Override
public boolean handleMessage(Message msg) {
if (msg.what == CLICK_ON_URL){
handler.removeMessages(CLICK_ON_WEBVIEW);
return true;
}
if (msg.what == CLICK_ON_WEBVIEW){
Toast.makeText(this, "WebView clicked", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
}
这篇关于如何在android中的webview上获取onclick事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!