问题描述
我想,当用户点击的WebView但不是一个超链接就知道了。上单击想要显示/隐藏我的活动保存网页视图的视图。任何建议?
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.
这可以用一些花哨处理程序
步法通过发送延迟的消息触摸,然后删除那些触摸消息如果触摸被用户点击的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;
}
}
希望这有助于。
Hope this helps.
这篇关于我怎样才能得到的WebView onclick事件在android系统?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!