2012-03-28 5 views
3

Dictioyanry-basierte Vorschläge werden in einer Kandidatenansicht von IME angezeigt, wenn wir mit der Eingabe im Textansichts-Editor beginnen. Wenn wir zum Beispiel "th" in textview eingeben, werden Wörter wie "this", "that", "the", "there" usw. angezeigt. Ich versuche herauszufinden, aus Android Repo-Quelle, wie diese wörterbuchbasierten Vorschläge intern abgerufen werden. Hat jemand versucht, dies zu untersuchen?Dictionary-basierte Auto-Vorschläge in Android IME

Antwort

1

Ich fing an, eine IME-Lösung für Android selbst zu erstellen, und ich verwende zwei Dinge für meine automatische Vervollständigung und Vorschläge. Nicht sicher, wie das dir oder irgendjemandem hilft. Aber das ist, was ich getan habe ...

Ich benutze die user_dict.db als Vorlage Datenbank aus dem Verzeichnis /data/data/com.android.providers.userdictionary/databases. Ich suchte nach den häufigsten englischen Wörtern und importierte sie in die Datenbank. Ich habe eine einfache Datenbankabfrage nach Wörtern gemacht, wie der Benutzer eine neue AsyncTask eingegeben hat. Auch wenn der Benutzer einen "Platz" zur Vervollständigung des Wortes einnimmt, habe ich Jazzy verwendet, was eine Rechtschreibprüfung für Java ist, und ich nahm die Eingabe von der InputConnection und schickte sie zur Überprüfung an Jazzy. Wenn die API mit mindestens zwei Ergebnissen aufwarten würde, würde ich das Benutzerwort durch das erste Ergebnis von Jazzy ersetzen.

Hier ist ein Teil des Codes, den ich verwendet habe, um die Liste der Vorschläge zu erstellen.

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 
     } 
} 

Hoffe das hilft jedem. Es kann einen anderen Weg geben, dies zu tun, aber diese Worte sind großartig und schnell. Sie müssen möglicherweise die beste Abfrage herausfinden, die Ihren Anforderungen entspricht.

Verwandte Themen