Jak włączyć sugestie w klawiaturze Androida

Pracuję na Androidzie SoftKeyboard. Stworzyłem układ dla klawiatury, ale nie wiem, jak dołączyć sugestie, które pojawiają się, jeśli wpiszemy jakieś słowo w EditText.
Na przykład, jeśli piszę "Kn", to "znane" i "znane" są pokazane w sugestiach.
Więc moje pytania są -
1) Jak uwzględnić sugestie w Androidzie Softkeyboard?
2) Czy Jest jakiś sposób, aby dołączyć naszą własną listę sugestii?
Thanx dużo wcześniej.
Już sprawdziłem to i to , ale nie jest w stanie znaleźć właściwej odpowiedzi. Każda pomoc będzie mile widziana.

EDIT
Chcę dołączyć sugestie bezpośrednio nad klawiaturą, jak pokazano na zdjęciu poniżej.

Sugestie w klawiaturze

Author: Community, 2015-03-13

2 answers

Możesz użyć metody statycznej UserDictionary.Words.addWord(....): Link

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    // On JellyBean & above, you can provide a shortcut and an explicit Locale
    UserDictionary.Words.addWord(this, "MadeUpWord", 10, "Mad", Locale.getDefault());
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
    UserDictionary.Words.addWord(this, "MadeUpWord", 10, UserDictionary.Words.LOCALE_TYPE_CURRENT);
}

Musisz dodać to pozwolenie do manifestu:

<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>

Dodane słowa pojawią się w Settings > Language & input > Personal dictionary.

Jeśli implementujesz własną miękką klawiaturę, proponuję przejść przez tworząc Metodę Wprowadzania. Sugestie są zwykle pokazane w Candidates View. Domyślnie InputMethodService#onCreateCandidatesView() zwraca null. Należy nadpisać tę metodę, aby zwrócić implementację paska sugestii.

Oto przykładowy projekt, który implementuje Widok kandydatów: SoftKeyboard.

Więcej informacji :

Sugestie słów i wyrażeń znajdują się w widoku kandydatów. Informacje o tym, jak go utworzyć i wypełnić, znajdują się w przykładowym projekcie wspomnianym powyżej.

Z tego, co wiem, wybór słów / fraz do sugerowania jest obowiązkiem dewelopera. Android nie zapewnia tych dla Ciebie. Prawdopodobnie będziesz potrzebował zestawu słowników - po jednym dla każdego język / locale, które planujesz obsługiwać. Możesz również chcieć zachować słownik słów określonych przez użytkownika.

Domyślna klawiatura Androida wykorzystuje te: Link

Jeśli pobierzesz jeden z nich, rozpakuj go i Otwórz za pomocą edytora tekstu:

dictionary=main:en,locale=en,description=English,date=1402373178,version=47
word=the,f=222,flags=,originalFreq=222
word=to,f=215,flags=,originalFreq=208
word=of,f=214,flags=,originalFreq=214
word=and,f=212,flags=,originalFreq=212
word=in,f=210,flags=,originalFreq=210
.... 165,635 more lines

Jak widać, częstotliwość odgrywa kluczową rolę w określaniu przydatności słowa jako sugestii. Prawdopodobnie nie chcesz sugerować tachometer, gdy użytkownik typuje ta. Prawdopodobnie czy chcesz zasugerować take - częstotliwość Ci w tym pomaga.

Autokorekcja:

word=id,f=99,flags=,originalFreq=99
shortcut=I'd,f=whitelist

Flagi oznaczają odpowiedniość:

word=goddamn,f=0,flags=offensive,originalFreq=62

Nawet jeśli zdecydujesz się użyć tych słowników, kod do ich analizy i uzyskania znaczących sugestii będzie musiał pochodzić od Ciebie.

Dwa artykuły (oba autorstwa Piotra Kankowskiego) mówiące o predictive text input & spelling correction:

Używanie DAWG do predykcyjnego wprowadzania tekstu

Używanie dag trójdzielnych do pisowni Korekta

Kandydaci :

Pierwszą rzeczą, którą powinieneś wiedzieć o Kandydatachview: jest opcjonalny. W rzeczywistości LatinIME (domyślna miękka klawiatura Androida) jej nie używa. Zamiast tego LatinIME ma własną implementację - SuggestionStripView - która jest podobna. Domyślnym zachowaniem InputMethodService#onCreateCandidatesView() jest zwrócenie null. Jeśli zdecydujesz się dostarczyć własną implementację, nie nadpisuj tej metody.

Musisz zdecydować, jak powinien wyglądać twój kandydat. Jeden możliwy implementacja może być HorizontalScrollView. Po ocenie sugestii (na przykład, użytkownik zaczyna pisać "jako", a twoja sugestia-logika daje List<String> zawierający "has", "was", "assist", "ask", "asked", "asking", "assume"), Utwórz i dodaj TextViews trzymając te łańcuchy do HorizontalScrollView(LinearLayout). W ten sposób użytkownik może przewijać w poziomie i wybrać zamierzone słowo, klikając na nie.

To do ciebie należy decyzja, czy korzystać z API, czy obsługiwać CandidatesView samodzielnie. Jeśli chcesz użyć API, Nadpisz InputMetodService#onCreateCandidatesView(), nadmuchaj swój niestandardowy układ, a następnie zwróć go. Przytrzymaj odniesienie do niego, aby można było go zaktualizować, gdy jest to wymagane. Aby kontrolować widoczność CandidatesView's, użyj metody setCandidatesViewShown(boolean).
 23
Author: Vikram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-22 16:16:46

Jeśli tworzysz niestandardową klawiaturę, proponuję przejść przez tworząc Metodę Wprowadzania, Istnieje przykładowy kod, który możesz przejrzeć. CandidateView jest prawdopodobnie tym, czego szukasz. Jest to wyjaśnione w linku powyżej.

Jeśli chcesz zapewnić sprawdzanie pisowni w wierszu, powinieneś sprawdzić Spellchecker framework

Mam nadzieję, że to pomoże.

 1
Author: bond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-17 15:03:11