我在webview中加载静态html和url。另外,我的网页视图是可点击的,其点击意图已被触发。


  我想实现-当在webview中单击url / html中的链接时
  链接应加载到webview中。但是,当单击Webview并且没有链接时
  被点击的意图应该被解雇。


我需要实现onTouch侦听器,以检测对Webview和触发意图的触摸。但是,如果我实现ontouch,则内部链接永远不会在webview的html / url中打开

public class WebViewHotspotClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
//        return super.shouldOverrideUrlLoading(view, url);
//        return true; does not open link
        return false;//opens link in web view
    }
}

    hotspotWebview.setWebViewClient(new WebViewHotspotClient());
//        hotspotWebview.setOnTouchListener(new OnTouchListener() {
//            @Override
//            public boolean onTouch(View view, MotionEvent motionEvent) {
//                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
//                    startActivity(new Intent(ImageFrameActivity.this, HotspotActivity.class));
//                }
//                return false;
//            }
//        });


谢谢!

最佳答案

这里发生的是,当您将ontouchlistener分配给整个Web视图时,其他元素位于其下方,而它们没有任何触摸或点击。要解决此问题,您可以执行以下操作

public class MyWebViewClicker extends Activity implements OnTouchListener,     Handler.Callback {

private static final int CLICK_WEBVIEW = 1;
private static final int CLICK_URL = 2;

private final Handler handler = new Handler(this);

private WebView webView;
private WebViewClient webviewclient;
boolean donext=false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view);

webView = (WebView)findViewById(R.id.myweb);
webView.setOnTouchListener(this);

webviewclient = new WebViewClient(){
    @Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
        handler.sendEmptyMessage(CLICK_URL);
        return false;
    }
};

webView.setWebViewClient(webviewclient);
webView.setVerticalScrollBarEnabled(false);
webView.loadUrl("http://www.example.com");
}

@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.myweb && event.getAction() == MotionEvent.ACTION_DOWN)  {
    handler.sendEmptyMessageDelayed(CLICK_WEBVIEW, 500);
}
return false;
}

@Override
public boolean handleMessage(Message msg) {
if (msg.what == CLICK_URL){
    Toast.makeText(this, "URL is clicked", Toast.LENGTH_SHORT).show();
    donext=true;
    return true;
}
if (msg.what == CLICK_WEBVIEW){
    if(donext==true)
    {
      //do nothing
    }else{
    Toast.makeText(this, "WebView is clicked", Toast.LENGTH_SHORT).show();
     }
    return true;
}
return false;
}
}

10-07 12:24
查看更多