在WebView中禁用SoftKeyboard

时间:2015-04-02 08:48:42

标签: android webview

我知道这是一个常见的问题,但我无法在谷歌找到这个有效的解决方案。

我的Android应用程序中有一个WebView,里面有一个带有简单DatePicker组件的JSF页面:

<p:calendar value="#{patientHealthDataView.dateFrom}" id="popupButtonDateFrom" showOn="button" class="tableCalendarText"/>

显示带日历的Popup。

感谢这个命令,我设法让弹出窗口工作:

WebView view=(WebView)findViewById(R.id.statistics);
view.getSettings().setJavaScriptEnabled(true);

不幸的是,当我点击输入文字或按钮显示日历的弹出窗口时,焦点转到输入文字,Android显示其键盘隐藏日历。

我尝试了几种解决方案。最后一个是:

 view.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            hideSoftKeyboard(v);
            return false;
        }
    });

public void hideSoftKeyboard(View v) {
        Activity activity = (Activity) v.getContext();
        InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
    }

此代码,如Android Studio所示,会在以下位置引发空指针异常:

activity.getCurrentFocus().getWindowToken()

其他解决方案说要在清单中插入一个特殊命令,但我只想在WebView中阻止键盘。

有什么建议吗?

2 个答案:

答案 0 :(得分:11)

在layout.xml

中的main(父)布局中添加以下代码
android:descendantFocusability="blocksDescendants"

希望它能奏效。

并在网页视图中设置以下属性

android:focusable="false" 
android:focusableInTouchMode="true"

答案 1 :(得分:0)

我有一个类似的问题。我正在使用带datetimepicker的文本输入:

HTML:需要输入type =“ text” placeholder =“ Birth Date” id =“ some_id” name =“ some_id” value =“”

jQuery: $('#some_id')。datetimepicker({format:\'YYYY-MM-DD \'});

但是,这引起了问题,因为当您尝试选择日期时,软键盘会弹出。然后,我尝试使用以下方法修复该问题:

HTML:输入type =“ text” placeholder =“ Birth Date” id =“ some_id” name =“ some_id” value =“” onfocus =“ blur();”必填

此方法有效,但是实际打开日历花了太长时间,但是至少没有弹出软键盘。这只是为了向您展示我最初尝试的内容。

我的解决方案: 输入type =“ date” placeholder =“出生日期” id =“ some_id” name =“ some_id” value =“”必填

我要做的就是将输入类型从“文本”更改为“日期”并删除jquery行。

希望这对某人有帮助。 :)