我在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;
}
}