【发布时间】:2012-03-28 06:28:43
【问题描述】:
当我们开始在 textview 编辑器中输入时,基于字典的建议会显示在 IME 的候选视图中。例如,如果我们在 textview 中键入“th”,则会显示“this”、“that”、“the”、“there”等词。我试图从 Android repo 源中找出这些基于字典的建议是如何在内部获取的。有没有人试过调查这个?
【问题讨论】:
标签: android
当我们开始在 textview 编辑器中输入时,基于字典的建议会显示在 IME 的候选视图中。例如,如果我们在 textview 中键入“th”,则会显示“this”、“that”、“the”、“there”等词。我试图从 Android repo 源中找出这些基于字典的建议是如何在内部获取的。有没有人试过调查这个?
【问题讨论】:
标签: android
我自己开始为 android 创建一个 IME 解决方案,并且我使用两件事来实现我的自动完成和建议。不确定这将如何帮助您或任何人。但这就是我所做的......
我使用 user_dict.db 作为 /data/data/com.android.providers.userdictionary/databases 目录中的模板数据库。我搜索了最常见的英语单词并将它们导入数据库。我对用户在新 AsyncTask 中键入的内容进行了简单的数据库查询。此外,当用户使用“空格”来完成单词时,我使用了 Jazzy,它是 Java 的拼写检查 api,我从 InputConnection 中获取输入并将其发送给 Jazzy 进行检查。如果 api 至少有两个结果,我会用 Jazzy 的第一个结果替换用户词。
这是我用来创建建议列表的一些代码。
ArrayList<String> list = new ArrayList<String>();
.....AsyncTask.......
protected String doInBackground(String... str) {
list.clear();
list.add(totalString); // this is the string
//captured from InputConnection
Cursor c = db.getNameTitle(totalString); //this is my method in my Database
//adapter that queries the database and returns a limit of 30 results
if(c.moveToFirst()){
for(int i = 0; i < c.getCount(); i++){
list.add(c.getString(c.getColumnIndex(DBAdapter2.KEY_WORD)));
if(c.getCount() != i){
c.moveToNext();
}
}
}
c.close();
}
protected void onPostExecute(String result) {
mCandidateView.clear();
mCandidateView.setCandidatesViewShown(false);
Log.i("TAG", String.valueOf(list.size()));
if(list.size() > 0 && list.size() < 32){
mCandidateView.setSuggestions(list, true, true);//CandidateView similar to the SDK's example of SoftKeyboard or LatinIME
}
}
希望这对任何人都有帮助。可能有另一种方法可以做到这一点,但这个词很棒而且很快。您可能需要找出最适合您需求的查询。
【讨论】: