如何在Android中获取WebView的输入区域回调

时间:2016-10-25 03:51:35

标签: android webview

我正在Android中开发键盘。键盘包含WebView。当用户在WebView中单击网页的输入区域时,应显示键盘面板。在我检查了WebView的所有回调之后,我找不到任何回调被调用。我怎么知道用户点击输入区域并做某事?

1 个答案:

答案 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步法来实现。