gpt4 book ai didi

android - 如何在 android 的 webview 上获取 onclick 事件?

转载 作者:IT老高 更新时间:2023-10-28 13:17:06 26 4
gpt4 key购买 nike

我想知道用户何时单击 webview 而不是超链接。在该单击上,我想显示/隐藏包含 web View 的我的 Activity View 。有什么建议吗?

最佳答案

我看了一下,发现 WebView 似乎没有将点击事件发送到 OnClickListener。如果有人可以证明我错了或告诉我为什么,那么我很想听听。

我发现WebView 会将触摸事件发送到OnTouchListener。它确实有自己的 onTouchEvent 方法,但我似乎只使用该方法获得 MotionEvent.ACTION_MOVE

因此,鉴于我们可以在已注册的触摸事件监听器上获取事件,剩下的唯一问题是当用户单击 URL 时如何规避您想要为触摸执行的任何操作。

这可以通过一些花哨的 Handler 步法来实现,方法是发送延迟的触摸消息,然后如果触摸是由用户单击 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 - 如何在 android 的 webview 上获取 onclick 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com