如何在 Android 键盘中包含建议
How to include suggestions in Android Keyboard
我正在研究 Android SoftKeyboard。我已经为键盘创建了布局,但不知道如何包含如果我们在 EditText 中键入某些单词时出现的建议。
例如,如果我写 "Kn",那么 "Known" 和 "Known" 会显示在建议中。
所以我的问题是 -
1) 如何在 Android 软键盘中包含建议?
2)有什么办法可以包含我们自己的建议列表吗?
非常感谢。
我已经检查过 this and this 但找不到任何正确的答案。任何帮助将不胜感激。
编辑
我想直接在键盘上方包含建议,如下图所示。
您可以使用静态方法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()
return 为空。您应该覆盖此方法以 return 您对建议栏的实施。
这是一个实现 Candidates 视图的示例项目:SoftKeyboard。
更多信息:
候选人视图中的单词和短语建议。有关如何创建和填充它的信息在上面提到的示例项目中。
据我所知,选择 words/phrases 建议的内容是开发人员的责任。 Android 不为您提供这些。您可能需要一套词典 - 每个 language/locale 您计划支持的词典。您可能还想维护用户指定单词的字典。
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
很明显,频率在确定单词作为建议的适用性方面起着关键作用。您可能不想在用户键入 ta
时建议 tachometer
。您可能 do 想建议 take
- 频率可以帮助您。
自动更正:
word=id,f=99,flags=,originalFreq=99
shortcut=I'd,f=whitelist
标志表明适当性:
word=goddamn,f=0,flags=offensive,originalFreq=62
即使您决定使用这些词典,解析它们并获得有意义的建议的代码也必须来自您。
关于 predictive text input
和 spelling correction
的两篇文章(均由 Peter Kankowski 撰写):
Using DAWG for predictive text input
Using Ternary DAGs for Spelling Correction
CandidatesView:
关于 CandidatesView 您应该了解的第一件事:它是可选的。事实上,LatinIME
(android的默认软键盘)并没有使用它。相反 LatinIME
有它自己的实现 - SuggestionStripView
- 这是相似的。 InputMethodService#onCreateCandidatesView()
的默认行为是 return null。如果您选择提供自己的实现,请不要覆盖此方法。
您需要决定 CandidatesView 的外观。一种可能的实现可以是 HorizontalScrollView
。在你评估你的建议后(例如,用户开始写 "as",你的建议逻辑给你一个包含 "has"、"was"、"assist" 的 List<String>
, "ask"、"asked"、"asking"、"assume"),创建并添加 TextViews
保存这些字符串到 HorizontalScrollView(LinearLayout)
。这样,用户可以水平滚动并通过单击选择想要的词。
由您决定是使用 API 还是自己处理 CandidatesView
。如果您想使用 API,覆盖 InputMetodService#onCreateCandidatesView()
,扩充您的自定义布局,然后 return 它。保留对它的引用,以便您可以在需要时更新它。要控制 CandidatesView's
可见性,请使用方法 setCandidatesViewShown(boolean)
。
如果您正在创建自定义键盘,我建议您通过 Creating Input Method, there is a sample code 来完成。 CandidateView 可能就是您正在寻找的。在上面的link中有解释。
如果您想提供内联拼写检查器,您需要查看 Spellchecker framework
希望对您有所帮助。
我正在研究 Android SoftKeyboard。我已经为键盘创建了布局,但不知道如何包含如果我们在 EditText 中键入某些单词时出现的建议。
例如,如果我写 "Kn",那么 "Known" 和 "Known" 会显示在建议中。
所以我的问题是 -
1) 如何在 Android 软键盘中包含建议?
2)有什么办法可以包含我们自己的建议列表吗?
非常感谢。
我已经检查过 this and this 但找不到任何正确的答案。任何帮助将不胜感激。
编辑
我想直接在键盘上方包含建议,如下图所示。
您可以使用静态方法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()
return 为空。您应该覆盖此方法以 return 您对建议栏的实施。
这是一个实现 Candidates 视图的示例项目:SoftKeyboard。
更多信息:
候选人视图中的单词和短语建议。有关如何创建和填充它的信息在上面提到的示例项目中。
据我所知,选择 words/phrases 建议的内容是开发人员的责任。 Android 不为您提供这些。您可能需要一套词典 - 每个 language/locale 您计划支持的词典。您可能还想维护用户指定单词的字典。
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
很明显,频率在确定单词作为建议的适用性方面起着关键作用。您可能不想在用户键入 ta
时建议 tachometer
。您可能 do 想建议 take
- 频率可以帮助您。
自动更正:
word=id,f=99,flags=,originalFreq=99
shortcut=I'd,f=whitelist
标志表明适当性:
word=goddamn,f=0,flags=offensive,originalFreq=62
即使您决定使用这些词典,解析它们并获得有意义的建议的代码也必须来自您。
关于 predictive text input
和 spelling correction
的两篇文章(均由 Peter Kankowski 撰写):
Using DAWG for predictive text input
Using Ternary DAGs for Spelling Correction
CandidatesView:
关于 CandidatesView 您应该了解的第一件事:它是可选的。事实上,LatinIME
(android的默认软键盘)并没有使用它。相反 LatinIME
有它自己的实现 - SuggestionStripView
- 这是相似的。 InputMethodService#onCreateCandidatesView()
的默认行为是 return null。如果您选择提供自己的实现,请不要覆盖此方法。
您需要决定 CandidatesView 的外观。一种可能的实现可以是 HorizontalScrollView
。在你评估你的建议后(例如,用户开始写 "as",你的建议逻辑给你一个包含 "has"、"was"、"assist" 的 List<String>
, "ask"、"asked"、"asking"、"assume"),创建并添加 TextViews
保存这些字符串到 HorizontalScrollView(LinearLayout)
。这样,用户可以水平滚动并通过单击选择想要的词。
由您决定是使用 API 还是自己处理 CandidatesView
。如果您想使用 API,覆盖 InputMetodService#onCreateCandidatesView()
,扩充您的自定义布局,然后 return 它。保留对它的引用,以便您可以在需要时更新它。要控制 CandidatesView's
可见性,请使用方法 setCandidatesViewShown(boolean)
。
如果您正在创建自定义键盘,我建议您通过 Creating Input Method, there is a sample code 来完成。 CandidateView 可能就是您正在寻找的。在上面的link中有解释。
如果您想提供内联拼写检查器,您需要查看 Spellchecker framework
希望对您有所帮助。