我正在Android中开发键盘。键盘包含WebView。当用户在WebView中单击网页的输入区域时,应显示键盘面板。在我检查了WebView的所有回调之后,我找不到任何回调被调用。我怎么知道用户点击输入区域并做某事?
答案 0 :(得分:-1)
尝试检查一下:
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;
}
}
我找到的是WebView会将触摸事件发送到OnTouchListener。它确实有自己的onTouchEvent方法,但我似乎只是使用该方法获取MotionEvent.ACTION_MOVE。
因此,我们可以在已注册的触摸事件监听器上获取事件,唯一的问题是如何在用户单击URL时规避您想要执行的操作。
通过发送延迟的触摸消息然后删除触摸消息,如果触摸是由用户点击URL引起的,可以通过一些花哨的Handler步法来实现。