Android IME中基于字典的自动建议

时间:2012-03-28 06:28:44

标签: android

当我们开始在textview编辑器中输入时,基于Dictioanry的建议会显示在IME的候选视图中。例如,如果我们在textview中键入“th”,则会显示“this”,“that”,“the”,“there”等字样。我试图从Android repo源中找出,如何在内部获取这些基于字典的建议。有没有人试过调查这个?

1 个答案:

答案 0 :(得分:1)

我开始为Android自己创建一个IME解决方案,我正在使用两件事来完成我的自动完成和建议。不确定这将如何帮助您或任何人。但这就是我所做的......

我使用user_dict.db作为/data/data/com.android.providers.userdictionary/databases目录中的模板数据库。我搜索了最常见的英语单词并将它们导入数据库。我做了一个简单的数据库查询,比如用户在新的AsyncTask中键入的内容。此外,当用户创建一个“空格”来完成单词时,我使用了Jazzy,它是Java的拼写检查程序,我从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
         }
}

希望这有助于任何人。可能有另一种方法可以做到这一点,但这句话很棒而且速度很快。您可能需要找出最适合您需求的查询。