隐藏或禁用的WebView softkeyboard GO / DONE /回车键(Hide or

2019-10-30 03:50发布

我一直在寻找这一切的一天的工作示例,并没有发现任何实际工作。

我有一个简单的反馈形式在网上,我已经设置与的WebView在Android设备上运行,专为Nexus 7(它只会在本地在我们的酒店在这些设备上使用)。

问题是,html的反馈形式有不同的字段集,有的用单选按钮与其他文本字段和文本区域。 该表格是通过邮寄发送,我有打电话的形式jQuery验证脚本:

<form name="form" method="post" action="feedback_manager/fb_save.php" onsubmit="return validateForm()" >

一切都运行得很好,除非用户在文本字段中有一个在他们必然要点击(或触摸)后,他们已经完成键入软键盘蔚蓝色的“开始”按钮,填补了,问题是,它不“T带他们到一个表单字段集,而不是它会自动提交表单(或在这种情况下,第一次运行我的验证脚本)。

不是KEYCODE_ENTER按钮的默认操作应该给用户发送到下一个字段集,而不是提交表单的?

我将分享我的html形式和希望我的web视图脚本,有人可能会觉得我做错了什么:

<fieldset>
<legend>Food quality, taste &amp; presentation</legend>

    <input id="flavor4" name="flavor" value="excellent" type="radio" />
    <label for="flavor4"> Excellent</label><br>

    <input id="flavor3" name="flavor" value="good" type="radio" />
    <label for="flavor3"> Good</label><br>

    <input id="flavor2" name="flavor" value="average" type="radio" />
    <label for="flavor2"> Average</label><br>

    <input id="flavor1" name="flavor" value="bad" type="radio" />
    <label for="flavor1"> Needs improvement</label><br>

</fieldset>
<fieldset>
    <legend>Who was your waiter today?</legend>
    <input name="waiter" type="text">
</fieldset>

//then another fieldset with radio buttons and so on

难道说我的文字输入是不是彼此后立即向右并与单选按钮和组合框混合?

这里是我的onkeydown代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
    {
        mWebView.goBack();
        return true;
    }
    if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
        // do nothing
        return false;
    }
    return true;
}

关于这个有趣的是,我的KEYCODE_BACK条件是工作正常,但我想KEYCODE_ENTER按钮,要么什么也不做,只是关闭软键盘或进入下一个字段,但不提交表单。

我见过很多答案在这里SO,但他们都不是工作在Nexus7(还没有真正尝试过在其他设备上)。

所以总结,我需要的只是有一个蓝色的“开始”按钮,什么都不做或去下一个领域。

请帮助。

** 编辑 **

今天早上我在看这一个别开生面,发现这个类似的帖子,增加了一个OnKeyListener检测键,然后返回false。 上的EditText击中两次安其回车键

mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("http://some.url");
    mWebView.setWebViewClient(new virtuoWebViewClient());

    mWebView.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    // do nothing
                    return false;
                }
            }
            return false;
        }
    });

但依然一无所获,“转到”按钮仍然提交表单:(,我会继续努力,如果有人可以点我在一个不同的方向或分享新的想法,我将不胜感激。THX。

Answer 1:

我花了一个可怕的很长一段时间寻找一个解决方案,但没有什么是完美的。 这是我能找到的最好的解决方法,它取代了“回归”(提交)行动,“标签”行动,除非焦点是一个textarea或提交按钮:

$("form").keydown(function(e){
    if (e.which != 13) return; // ENTER
    if (e.target.type == "textarea" || e.target.type == "button") return;
    if ($("input[type=submit]", this).length == 1) return; // autosubmit form

    var nextTabbable = null;
    var $tr = $(e.target).closest("tr, form");
    var narrowContext = $tr.length && e.target.tabIndex == undefined && !$tr.is("form");
    if (narrowContext) nextTabbable = getNextTabbable($tr.add($tr.next()), e.target);
    if (!nextTabbable) nextTabbable = getNextTabbable(this, e.target);

    if (nextTabbable) {
        if (nextTabbable.type == "text" && nextTabbable.value != "") nextTabbable.select();
            nextTabbable.focus();
        return false;
    }
});

function getNextTabbable(ctx, current) {
    var $t = $("input[tabindex!=-1]:visible, select[tabindex!=-1]:visible, textarea[tabindex!=-1]:visible", ctx).not(":disabled");
    var docIndex = {};
    $t.each(function(i,e){ docIndex[e] = i });
    $sorted = $t.sort(function(a,b){ return a.tabIndex==b.tabIndex ? docIndex[a]<docIndex[b] : a.tabIndex<b.tabIndex ? -1 : 1 });
    return $sorted.get($sorted.index(current)+1);
}


Answer 2:

好吧,我不得不让这个煨,因为它有一个有点沮丧,大量的试验后和错误似乎的WebView本身不会让我没有EditText上要去的行为。 我并不真正需要的EditText这个应用程序,我发现了输入型的文本显示“转到”按钮,但文字区域不一样,他们使用回车键取代它(不是蓝色,不发送的形式),它的廉价和粗糙,但适合的目的,所以我基本上结束了使用与参数行=“1”,所以它看起来像一个输入型的文本文字区域。

<textarea rows="1" name="waiter"></textarea>

一个非常低的高科技解决方案,以隐藏“开始”,“完成”或“确定”按钮XD。



文章来源: Hide or disable WebView softkeyboard Go/Done/Enter button