如何确定 HTML 元素何时在 Android WebView 中获得焦点?

Posted

技术标签:

【中文标题】如何确定 HTML 元素何时在 Android WebView 中获得焦点?【英文标题】:How to determine when an HTML element gains focus in Android WebView? 【发布时间】:2015-10-26 00:10:19 【问题描述】:

我正在尝试确定 html 页面中的文本字段何时从 android WebView 获得焦点。一些注意事项:我不拥有该网页,因此我无法直接向网页添加任何内容。

我尝试过的:

    webSettings.setjavascriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webView.addJavascriptInterface(new Object() 

        @JavascriptInterface
        public void displayScanButton() 
            WebViewActivity.this.runOnUiThread(new Runnable() 
                @Override
                public void run() 
                    Log.d("SCAN", "DISPLAY SCAN BUTTON");
                    toolbar.setVisibility(View.VISIBLE);
                
            );
        

        @JavascriptInterface
        public void hideScanButton() 
            WebViewActivity.this.runOnUiThread(new Runnable() 
                @Override
                public void run() 
                    Log.d("SCAN", "HIDE SCAN BUTTON");
                    toolbar.setVisibility(View.GONE);
                
            );
        
    , "Android");

@Override
public void onPageFinished(WebView view, String url) 
    view.loadUrl("javascript:document.getElementById('tNewLabels').onfocus = Android.displayScanButton; document.getElementById('tNewLabels').onfocusout = Android.hideScanButton;");

我也有几个变体,但这是我目前拥有的。 它不会为输入字段设置 onfocus。

基本上我想要的是当用户单击输入字段以输入文本时,我只显示我为这个特定元素附加到键盘的工具栏。当用户不再关注输入字段时,隐藏工具栏。我认为会有一种方法,因为 WebView 知道何时打开键盘以及何时关闭它。可能有办法拦截这个?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

试试这个:

document.getElementById('tNewLabels').onfocus = function()  Android.displayScanButton(); ;
document.getElementById('tNewLabels').onfocusout = function()  Android.hideScanButton(); ;

要使 Android-Java 桥接器工作,您的函数必须将接口对象作为“this”变量。将函数直接分配给事件会将其从与接口对象的附件中剥离。我听说它过去在旧版本的 WebView 中仍然可以工作,但现在已经不行了。

很抱歉再次提出一个老问题,您可能已经想通了。

【讨论】:

以上是关于如何确定 HTML 元素何时在 Android WebView 中获得焦点?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以确定何时使用 JavaScript 渲染了元素?

如何确定 HTML5 视频播放器何时在 iOS / iPad 上进入全屏模式?

在 Android M 中确定应用何时退出空闲模式

如何确定 Vue 何时完成更新 DOM?

我应该何时(而不是如何)在 Android 上测试 UI 组件?

不确定的进度条何时进入 Android 支持库