如何在Android键盘中包含建议

时间:2015-03-13 11:45:11

标签: android android-softkeyboard

我正在使用Android SoftKeyboard。我已经为键盘创建了布局,但是如果我们在EditText中键入一些单词,则不知道如何包含建议。
例如,如果我写" Kn"然后"已知"和#34;已知"显示在建议中 所以我的问题是 -
1)如何在Android软键盘中添加建议?
2)有没有办法列出我们自己的建议清单? 提前做了很多。
我已经检查了thisthis,但无法找到任何正确的答案。任何帮助将不胜感激。

修改
我想直接在键盘上方添加建议,如下图所示。

Suggestions in keyboard

2 个答案:

答案 0 :(得分:27)

您可以使用静态方法UserDictionary.Words.addWord(....)Link

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    // On JellyBean & above, you can provide a shortcut and an explicit Locale
    UserDictionary.Words.addWord(this, "MadeUpWord", 10, "Mad", Locale.getDefault());
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
    UserDictionary.Words.addWord(this, "MadeUpWord", 10, UserDictionary.Words.LOCALE_TYPE_CURRENT);
}

您需要将此权限添加到清单中:

<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>

添加的字词会显示在Settings > Language & input > Personal dictionary

如果您要实现自己的软键盘,建议您浏览Creating an Input Method。建议通常显示在Candidates View中。默认情况下,InputMethodService#onCreateCandidatesView()返回null。您应该覆盖此方法以返回建议栏的实现。

这是一个实现候选人视图的示例项目:SoftKeyboard

更多信息

单词和短语建议进入候选人视图。有关如何创建&amp;的信息填充它在上面提到的示例项目中。

据我所知,选择建议的单词/短语是开发人员的责任。 Android不会为您提供这些。您可能需要一组词典 - 一个用于您计划支持的每种语言/语言环境。您可能还希望维护用户指定单词的字典。

Android的默认键盘使用以下设置:Link

如果您下载其中一个,请将其解压缩并使用文本编辑器打开:

dictionary=main:en,locale=en,description=English,date=1402373178,version=47
word=the,f=222,flags=,originalFreq=222
word=to,f=215,flags=,originalFreq=208
word=of,f=214,flags=,originalFreq=214
word=and,f=212,flags=,originalFreq=212
word=in,f=210,flags=,originalFreq=210
.... 165,635 more lines

显而易见,频率在确定单词作为建议的适用性方面起着关键作用。当用户键入tachometer时,您可能不希望建议ta。您可能想要建议take - 频率可以帮助您。

自动更正:

word=id,f=99,flags=,originalFreq=99
shortcut=I'd,f=whitelist

标志表明适当性:

word=goddamn,f=0,flags=offensive,originalFreq=62

即使您决定使用这些词典,解析它们并获得有意义的建议的代码也必须来自您。

两篇文章(均由Peter Kankowski撰写)谈及predictive text input&amp; spelling correction

Using DAWG for predictive text input

Using Ternary DAGs for Spelling Correction

<强> CandidatesView

您应该了解CandidatesView的第一件事:它是可选的。实际上,LatinIME(android的默认软键盘)不使用它。相反,LatinIME有自己的实现 - SuggestionStripView - 这是类似的。 InputMethodService#onCreateCandidatesView()的默认行为是返回null。如果您选择提供自己的实现,请不要覆盖此方法。

您需要确定CandidatesView应该是什么样子。一种可能的实现可以是HorizontalScrollView。评估完建议后(例如,用户开始写“as”,你的建议逻辑会给你一个List<String>包含“has”,“was”,“assist”,“ask”,“ask”, “问”,“假设”),创造&amp;将TextViews这些字符串添加到HorizontalScrollView(LinearLayout)。这样,用户可以水平滚动并通过单击选择想要的单词。

由您决定是使用API​​还是自己处理CandidatesView。如果您要使用API​​,请覆盖InputMetodService#onCreateCandidatesView(),为您的自定义布局充气,然后将其返回。保留对它的引用,以便您可以在需要时更新它。要控制CandidatesView's可见性,请使用方法setCandidatesViewShown(boolean)

答案 1 :(得分:1)

如果您要创建自定义键盘,建议您浏览Creating Input Method,可以查看sample code。 CandidateView可能就是你想要的。它在上面的链接中解释。

如果您想提供内联拼写检查,您可以查看Spellchecker framework

希望这有帮助。