android开发分享我怎样才能得到Android上的WebView onclick事件?

我想知道用户何时点击webview,而不是超链接。 在那个点击我想显示/隐藏我的活动持有一个web视图的视图。 任何build议?

    我看了一下,发现一个WebView似乎没有发送点击事件到一个OnClickListener 。 如果有人可以certificate我错了,或者告诉我为什么然后我有兴趣听到它。

    我find的是一个WebView将触发事件发送到一个OnTouchListener 。 它有自己的onTouchEvent方法,但我似乎只使用该方法得到onTouchEvent

    所以考虑到我们可以在已注册的触摸事件监听器上获取事件,唯一的问题是如何绕过用户点击某个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("https://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; } } 

    希望这可以帮助。

    您可以通过OnTouchListener实现一个OnClickListener:

     webView.setOnTouchListener(new View.OnTouchListener() { public final static int FINGER_RELEASED = 0; public final static int FINGER_TOUCHED = 1; public final static int FINGER_DRAGGING = 2; public final static int FINGER_UNDEFINED = 3; private int fingerState = FINGER_RELEASED; @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: if (fingerState == FINGER_RELEASED) fingerState = FINGER_TOUCHED; else fingerState = FINGER_UNDEFINED; break; case MotionEvent.ACTION_UP: if(fingerState != FINGER_DRAGGING) { fingerState = FINGER_RELEASED; // Your onClick codes } else if (fingerState == FINGER_DRAGGING) fingerState = FINGER_RELEASED; else fingerState = FINGER_UNDEFINED; break; case MotionEvent.ACTION_MOVE: if (fingerState == FINGER_TOUCHED || fingerState == FINGER_DRAGGING) fingerState = FINGER_DRAGGING; else fingerState = FINGER_UNDEFINED; break; default: fingerState = FINGER_UNDEFINED; } return false; } }); 

    Hamidreza的解决scheme几乎为我工作。

    我从实验中注意到,一个简单的敲击通常有2-5个动作移动事件。 检查行动之间的时间更简单,performance得更像我所期望的。

     private class CheckForClickTouchLister implements View.OnTouchListener { private final static long MAX_TOUCH_DURATION = 100; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: m_DownTime = event.getEventTime(); //init time break; case MotionEvent.ACTION_UP: if(event.getEventTime() - m_DownTime <= MAX_TOUCH_DURATION) //On click action break; default: break; //No-Op } return false; } 

    我想你也可以使用MotionEvent.ACTION_UP状态,例如:

     @Override public boolean onTouch(View v, MotionEvent event) { switch (v.getId()) { case R.id.iv: if (event.getAction() == MotionEvent.ACTION_UP) { if (isheadAndFootShow == false) { headLayout.setVisibility(View.VISIBLE); footLayout.setVisibility(View.VISIBLE); isheadAndFootShow = true; } else { headLayout.setVisibility(View.INVISIBLE); footLayout.setVisibility(View.INVISIBLE); isheadAndFootShow = false; } return true; } break; } return false; } 

    这对我有用

     webView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // Do what you want return false; } }); 

    在点击事件在webView在这样的onTouch中工作:

     imagewebViewNewsChart.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction()==MotionEvent.ACTION_MOVE){ return false; } if (event.getAction()==MotionEvent.ACTION_UP){ startActivity(new Intent(this,Example.class)); } return false; } }); 

    WebViewClient.shouldOverrideUrlLoading可能会有所帮助。 我们的应用程序中有一个类似的要求。 还没有尝试过。

    那是因为它绑定到web view而不是button。 实施后,我遇到了同样的问题。 该button没有影响,但网页视图中的页面做了。

      以上就是android开发分享我怎样才能得到Android上的WebView onclick事件?相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/520627.html

      (0)
      上一篇 2020年12月7日
      下一篇 2020年12月7日

      精彩推荐