当我们开始在textview编辑器中输入时,基于Dictioanry的建议会显示在IME的候选视图中。例如,如果我们在textview中键入“th”,则会显示“this”,“that”,“the”,“there”等字样。我试图从Android repo源中找出,如何在内部获取这些基于字典的建议。有没有人试过调查这个?
答案 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
}
}
希望这有助于任何人。可能有另一种方法可以做到这一点,但这句话很棒而且速度很快。您可能需要找出最适合您需求的查询。