Dacă creați un IME personalizat (Editor de metode de introducere a textului) sau o aplicație de procesare a limbajului, puteți utiliza cadrul de verificare a ortografiei Android pentru a adăuga rapid funcția de verificare a ortografică în aplicația dvs., fără a trebui să faceți față unor sarcini de nivel scăzut, cum ar fi menținerea listelor de cuvinte determinând distanțele dintre cuvinte ale lui Damerau-Levenshtein.
Cadrul poate fi, de asemenea, utilizat pentru a crea o verificare de ortografie personalizată (de exemplu, pentru o nouă limbă sau pentru un domeniu specific) pe care alte aplicații le pot utiliza.
Acest tutorial vă arată mai întâi cum să utilizați cadrul pentru a interacționa cu verificatorul de ortografie implicit Android și apoi treceți pentru a acoperi elementele de bază ale dezvoltării unui personalizat.
Activitate
Înainte de a ne arunca în cadru, să creați mai întâi un Activitate
care pot afișa rezultatele verificărilor de ortografie.
Creați o nouă clasă Java numită SpellingsClient care se extinde Activitate
. Această clasă trebuie să pună în aplicare și SpellCheckerSession.SpellCheckerSessionListener
pentru a interacționa cu serviciile de verificare a ortografiei Android. În Android Studio, puteți apăsa Alt + Insert pentru a genera automat stubs gol pentru metodele de interfață.
Ca asta Activitate
va avea doar unul TextView
în aspectul său, nu este necesar să creați un aspect XML pentru acesta. Împingeți onCreate
- metoda de inițializare a TextView
și trimiteți-l la setContentView
astfel încât aceasta să ia întreg ecranul.
În acest moment, clasa dvs. ar trebui să arate astfel:
clasa publică SpellingsClient extinde Activitatea implementează SpellCheckerSession.SpellCheckerSessionListener private TextView suggestions; @Override protejate void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); Sugestii = TextView nou (acest); setContentView (sugestii); @Override public void onGetSuggestions (sugestiiInfo [] rezultate) @Override public void onGetSentenceSuggestions (Rezultatele SentenceSuggestionsInfo [])
Să trecem acum o propoziție care conține mai multe cuvinte greșite în greșeală pentru verificatorul de ortografie implicit pentru Android. Creați o metodă numită fetchSuggestionsFor care acceptă a Şir
ca parametru.
private void fetchSuggestionsFor (intrare cu șir)
Deoarece verificatorul ortografiei Serviciu
face parte din Servicii text API, trebuie să utilizați getSystemService
- metoda de recuperare a unei instanțe TextServicesManager
. Apoi puteți apela newSpellCheckerSession
metoda de a crea un nou sesiune
, care poate fi folosit pentru a trimite date la verificatorul de ortografie. Adăugați următorul cod la metodă:
TextServicesManager tsm = (TextServicesManager) getSystemService (TEXT_SERVICES_MANAGER_SERVICE); Sesiunea SpellCheckerSession = tsm.newSpellCheckerSession (null, Locale.ENGLISH, this, true);
Asigurați-vă că locale
treci la newSpellCheckerSession
se potrivește cu limba propoziției introduse.
Acum, că sesiune
este gata, puteți apela getSentenceSuggestions
pentru a primi sugestii de ortografie pentru una sau mai multe propoziții.
getSentenceSuggestions
metoda ia doi parametri. Primul parametru este o matrice de TextInfo
obiecte. Utilizați constructorul TextInfo
clasa pentru a converti a Şir
intr-o TextInfo
obiect. Al doilea parametru este un int
care specifică numărul de sugestii care ar trebui generate. Pentru acest exemplu, permiteți-ne să-l setăm 5.
Adăugați următorul cod la metodă:
session.getSentenceSuggestions (nou TextInfo [] new TextInfo (input), 5);
În cele din urmă, sună fetchSuggestionsFor
în onCreate
metodă a Activitate
.
// Trimiterea unei propoziții care conține două cuvinte / cuvinte greșite fetchSuggestionsFor ("Peter trăiește în Brlin");
Rețineți că getSentenceSuggestions
metoda a fost introdusă în nivelul API 16. Versiunile anterioare ale API au folosit versiunea anterioară, fiind acum depreciate, getSuggestions
metodă.
getSentenceSuggestions
metoda interacționează cu verificatorul de ortografie în mod asincron. Când sugestiile au fost generate, onGetSentenceSuggestions
se numește metoda.
Sugestiile pentru fiecare teză de intrare sunt disponibile într-o secțiune separată SentenceSuggestionsInfo
obiect. Fiecare SentenceSuggestionsInfo
obiect conține multiple SuggestionsInfo
obiecte, de obicei pentru fiecare cuvânt al propoziției. Fiecare SuggestionsInfo
obiect conține sugestiile reale pentru un cuvânt sub formă de Şir
obiecte.
Pentru acest exemplu, să purtăm pur și simplu toate sugestiile și să le adăugăm la a StringBuffer
. Utilizare getSuggestionsCount
pentru a determina numărul de sugestii disponibile și getSuggestionInfoAt
pentru a obține o referință la un anumit SuggestionInfo
.
Adăugați următorul cod la onGetSentenceSuggestions
metodă:
final StringBuffer sb = nou StringBuffer (""); pentru (rezultatul SentenceSuggestionsInfo: rezultate) int n = result.getSuggestionsCount (); pentru (int i = 0; i < n; i++) int m = result.getSuggestionsInfoAt(i).getSuggestionsCount(); for(int k=0; k < m; k++) sb.append(result.getSuggestionsInfoAt(i).getSuggestionAt(k)) .append("\n"); sb.append("\n");
Acum puteți folosi TextView
„s setText
metoda de a face conținutul StringBuffer
. Cu toate acestea, nu puteți apela metoda direct, deoarece onGetSentenceSuggestions
se execută pe firul propriu. Încercarea de a face modificări în interfața de utilizator dintr-un fir non-UI va duce la o excepție de rulare. Prin urmare, asigurați-vă că apelați setText
din interiorul runOnUiThread
metodă.
runOnUiThread (noul Runnable () @Override public void run () suggestions.setText (sb.toString ()););
Dacă rulați aplicația acum, rezultatul va arăta astfel:
După cum vedeți, aplicația noastră arată în prezent sugestii pentru toate cuvintele din propoziție, chiar și pentru cele cu ortografie corectă.
Pentru a afișa sugestii numai pentru cuvinte greșite, trebuie să ne uităm la steagurile asociate cu fiecare SuggestionsInfo
obiect. A SuggestionsInfo
obiect pentru un cuvânt greșit scrise are RESULT_ATTR_LOOKS_LIKE_TYPO
set de pavilioane. Prin urmare, trebuie să adăugăm un cod de ignorat SuggestionsInfo
obiecte unde acest steag nu este setat.
Adăugați următorul cod la onGetSentenceSuggestions
înainte de a începe buclele interioare:
dacă ((result.getSuggestionsInfoAt (i) .getSuggestionsAttributes () & SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO)! = SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO) continuați;
Rulați aplicația din nou pentru a vedea ieșirea modificată.
Acum, că știți cum să interacționați cu verificatorul de ortografie implicit, permiteți-ne să creăm o verificare de ortografie personalizată.
Serviciu
Creați o nouă clasă Java numită SpellingService. Pentru ca o clasă să fie tratată ca o verificare de ortografie de către sistemul Android, trebuie să se extindă SpellCheckerService
clasa și suprascrie createSession
metodă.
Adăugați următorul cod la SpellingService.java:
clasa publică SpellingService extinde SpellCheckerService @Override public Session createSession ()
Toate logica personalizată de verificare a ortografiei se află în Sesiune
. Creați o nouă clasă numită MySpellingSession care se extinde Sesiune
. Puteți să-l creați ca o subclasă de SpellingService
.
Sesiune
clasa este o clasă abstractă. După ce eliminați toate metodele abstracte, clasa dvs. ar trebui să arate astfel:
clasa MySpellingSession extinde Sesiunea @Override public void onCreate () @Override publică SuggestionsInfo onGetSuggestions (TextInfo textInfo, int suggestionsLimit) @Override public SentenceSuggestionsInfo [] onGetSentenceSuggestionsMultiple (TextInfo [] textInfos, int suggestionsLimit)
Pentru acest tutorial, permiteți-ne să creăm o verificare de ortografie foarte simplă, care are următoarele caracteristici:
Codul pentru implementarea acestor funcții poate fi adăugat la onGetSuggestions
pentru că se presupune că se ocupă de cuvinte individuale (sub formă de a TextInfo
obiecte).
Extrageți cuvântul folosind getText
și verificați dacă este egal cu "Peter". Dacă este, adăugați sugestiile adecvate la o matrice de Şir
obiecte. Dacă nu este, păstrați matricea goală.
În cele din urmă, creați și returnați un nou SuggestionsInfo
obiect care conține gama de sugestii împreună cu steagul RESULT_ATTR_LOOKS_LIKE_TYPO
. Codul real ar putea arăta astfel:
Cuvantul cuvant = textInfo.getText (); Sugestii de șir [] = null; dacă word.equals ("Peter")) sugestii = nou String [] "Pedro", "Pietro", "Petar", "Pierre", "Petrus"; altceva sugsions = new String [] ; SuggestionsInfo suggestionsInfo = SugestiiInfo noi (sugestiiInfo.RESULT_ATTR_LOOKS_LIKE_TYPO, sugestii); retur sugestiiInfo;
Nu am terminat încă. SpellingsClient
clasa pe care am creat-o mai devreme a transmis fraze întregi la verificatorul de ortografie, nu la cuvintele individuale. Asta inseamna onGetSuggestions
metoda nu va fi chemată direct. Prin urmare, trebuie să scriem un cod care să împartă propozițiile în cuvinte și să le transmită ca argumente pentru onGetSuggestions
metodă. Acest cod trebuie adăugat la onGetSentenceSuggestionsMultiple
metodă.
Iată ce faceți în cazul onGetSentenceSuggestionsMultiple
metodă:
TextInfo
obiectele pe care le primește ca intrare și convertește fiecare propoziție într - o serie de cuvinte folosind Despică
metodă.TextInfo
obiecte și să le transmită ca argument la onGetSuggestions
metodă.ArrayList
de SuggestionsInfo
obiecte.SentenceSuggestionsInfo
obiecte utilizând ArrayList
de SuggestionsInfo
obiecte.Adăugați următorul cod la onGetSentenceSuggestionsMultiple
metodă:
ListăsugestiiInfos = noul ArrayList <> (); pentru (int i = 0; i Acum obiceiul
Sesiune
clasa este gata, creați și returnați o instanță a acestuia în serviciulcreateSession
metodă:returnează noua MySpellingSession ();Pasul 3: Creați metadatele pentru serviciu
Creați un nou fișier XML numit spellinginfo.xml în res / xml pliant. Acest fișier este utilizat de sistemul Android pentru a determina numele verificatorului ortografic și limbile pe care le acceptă. Să ne sunăm la verificatorul de ortografie Verificatorul meu de vrăji. Adăugați în fișier următorul cod:
Actualizați-vă Valorile / strings.xml așa că a existat
SERVICE_LABEL
:Verificatorul meu de vrăji Pasul 4: Actualizați Manifestul
Orice
Serviciu
care vrea să se comporte ca un verificator de ortografie trebuie să soliciteandroid.permission.BIND_TEXT_SERVICE
și să răspundă laandroid.service.textservice.SpellCheckerService
acțiune. De asemenea, ar trebui să conțină o referință la XML-ul metadatelor pe care l-am definit în pasul anterior. DefiniSpellingService
prin adăugarea următorului cod la dvs. AndroidManifest.xml:Pasul 5: Activați noua verificare a ortografiei
Dacă compilați și rulați aplicația acum, nu veți vedea nici o diferență în ieșirea dvs.
Activitate
. Acest lucru se datorează faptului că încă utilizează verificatorul de ortografie implicit Android. Pentru a activa verificatorul de vrăji personalizat, accesați Setări aplicație și alegeți verificatorul ortografic în Limba și intrarea secțiune.Odată activat, dacă reporniți aplicația, veți vedea sugestii numai pentru cuvântul "Peter".
Concluzie
În acest tutorial, ați învățat cum să comunicați cu serviciile de verificare a ortografiei Android pentru a efectua operații de verificare ortografică în aplicația dvs. De asemenea, ați învățat cum să vă creați propria verificare de ortografie personalizată. Puteți utiliza aceste cunoștințe pentru a crea nu numai IME-uri mai bune, ci și verificatori de ortografie pentru limbi care în prezent nu sunt acceptate de Android în mod implicit. Pentru a afla mai multe despre API-ul TextServices și Cadrul de verificare a ortografiei, consultați Referința dezvoltatorilor Android.