【问题标题】:Dictionary-based Auto-suggestions in Android IMEAndroid IME 中基于字典的自动建议
【发布时间】:2012-03-28 06:28:43
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

    我自己开始为 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
             }
    }
    

    希望这对任何人都有帮助。可能有另一种方法可以做到这一点,但这个词很棒而且很快。您可能需要找出最适合您需求的查询。

    【讨论】:

      猜你喜欢
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2021-01-06
      • 2014-10-01
      相关资源
      最近更新 更多