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.
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.
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)
.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.
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