2012-03-28 16 views
3

テキストビューエディタで入力を開始すると、辞書ベースの候補がIMEの候補ビューに表示されます。たとえば、textviewに "th"と入力すると、 "this"、 "that"、 "the"、 "there"などの単語が表示されます。私はこれらの辞書ベースの提案が内部的にどのように取り込まれるか、Androidのrepoソースから調べようとしています。誰かがこれを調査しようとしましたか?Androidでの辞書ベースの自動提案IME

答えて

1

私は自分自身でアンドロイド用のIMEソリューションを作成し始めました。私は自分のオートコンプリートと提案に2つのものを使用しています。これがどのようにあなたや誰に役立つかわからない。しかし、これは私がやったことです...

私は/data/data/com.android.providers.userdictionary/databasesディレクトリからテンプレートデータベースとしてuser_dict.dbを使いました。私は最も一般的な英語の単語を検索し、それらをデータベースにインポートしました。私は、ユーザーが新しいAsyncTaskでタイプしたもののような単語のための簡単なデータベースクエリを行いました。また、ユーザーが単語を完成させるために「スペース」を作ったときに、JavaのスペルチェッカーAPIであるJazzyを使用して、InputConnectionから入力を受け取り、それをJazzyに送って確認しました。 APIが少なくとも2つの結果を思いついた場合、私はユーザーの言葉を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 
     } 
} 

これは誰にも役立ちます。これを行う別の方法があるかもしれませんが、この言葉はすばらしく速いです。あなたのニーズに合った最適なクエリを見つけ出す必要があるかもしれません。

関連する問題