2

在基于 webview 的应用程序的文本类型输入元素中输入字符串时,虚拟键盘上方会显示可能的单词列表。

在我的应用程序中,不允许用户输入任意单词,而只有数据库中的单词和短语是合法的。

所以,我想从我的 phonegap 应用程序中设置单词列表并禁用此列表的自动创建。

问:这是否可以创建列表 - 以及如何创建?

(这是一个 phonegap 应用程序,我正在 android 上进行测试,但这可能是不同平台上的 webview/文本输入字段的问题)

编辑:
刚刚发现(是的,我是 android 开发新手),可以通过以下方式禁用建议列表:设置/语言和键盘/Android 键盘/显示建议。

但当然,此设置应仅针对应用程序进行,从应用程序内部进行,无需用户交互,也不能更改应用程序外部的任何内容。

有机会完成这件事吗?

编辑 2:
我没有禁用建议列表,而是尝试使用它。InputMethodManager 的 displayCompletions 方法听起来很有希望,所以我尝试了以下代码:

...
// data member
InputMethodManager mInputMethodManager = null;
...

    ...
    // initialized
    mInputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    ...

public void showSuggestions(String[] words) {
    Log.d(TAG, "showSuggestions (in Java!): " + words.length);  // yes, this code is executed
    CompletionInfo[] completions = new CompletionInfo[words.length];
    for (int i=0; i<words.length; i++) {
        completions[i] = new CompletionInfo(i, i, words[i]);    // no idea, what the 2 extra integers mean
    }
    mInputMethodManager.displayCompletions(mView, completions);
}

只要有可用的新列表(在输入更改并且服务器已响应请求之后),就会执行该方法。

然而,什么都没有改变——内置机制仍在做它不利的工作。

4

2 回答 2

0

如果有不同的虚拟键盘变体(swype 和其他),可能没有可能的单词列表。所以,我想没有不显示此列表的通用解决方案。

有一个参数http://developer.android.com/reference/android/widget/TextView.html#attr_android:editorExtras editorExtras 定义了传递给输入法实现的参数,但我不确定你会如何在PhoneGap中使用它应用

编辑:

我想您可以扩展默认输入法并使其不显示建议 inputmethod 参考http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html

提供定制软件键盘

如果您有兴趣开发自己的软件键盘,我们强烈推荐以下参考资料:

IME 被实现为 Android 服务。首先查看名为 android.inputmethodservice 和 android.view.inputmethod 的 Android 包,它们可用于实现自定义输入法。Android SDK 中的 SoftKeyboard 示例应用程序提供了软件键盘的实现。Android 开发者关于屏幕输入法和创建输入法的技术文章。

在这里找到它http://e-university.wisdomjobs.com/android/chapter-946-288/handling-advanced-user-input.html

于 2012-04-27T16:18:12.590 回答
0

为什么不使用 jQuery UI 中的自动完成功能。

http://jqueryui.com/demos/autocomplete/

此外,用 JavaScript 自己编写它并不难。

http://www.javascript-examples.com/autocomplete-demo/

于 2012-04-27T19:02:45.887 回答