2015-03-13 7 views
12

Ich arbeite an Android SoftKeyboard. Ich habe ein Layout für die Tastatur erstellt, weiß aber nicht, wie man Vorschläge einfügt, die erscheinen, wenn wir ein Wort in EditText eingeben.
Zum Beispiel, wenn ich "Kn" schreibe, dann werden "Bekannte" und "Bekannte" in Suggestions angezeigt.
So sind meine Fragen -
1) Wie Vorschläge in Android Softkeyboard?
2) Gibt es eine Möglichkeit, eine eigene Liste mit Vorschlägen hinzuzufügen?
Vielen Dank im Voraus.
Ich habe bereits this und this überprüft, aber nicht in der Lage, eine richtige Antwort zu finden. Jede Hilfe wäre willkommen.So fügen Sie Vorschläge in Android-Tastatur ein

EDIT
Ich möchte Anregungen direkt über Tastatur enthalten, wie unten in Abbildung dargestellt.

Suggestions in keyboard

+0

Ich denke, Sie möchten eine [AutoCompleteTextView] (http://developer.android.com/reference/android/widget/AutoCompleteTextView.html) verwenden, stattdessen ... –

+0

So möchte ich bestätigen, dass AutoCompleteTextView unten angezeigt wird EditText, in dem wir Text eingeben, oder es kann oben Tastatur auch als "Suggestions" verwendet werden, die direkt über Tastaturlayout angezeigt werden – Kunal

+0

Ich glaube nicht, dass es einen Weg gibt. Ich habe vorher eine ähnliche Frage gestellt und mir wurde gesagt, da es von der einzelnen Tastatur und ihrer Implementierung abhängt, gibt es keine Möglichkeit, dies durchzusetzen. (Ich wollte es verstecken, anstatt Vorschläge hinzuzufügen, aber es ist das gleiche Prinzip). Und AutoCompleteTextView ist wie ein Kombinationsfeld mit Vorschlägen. Es fügt der Tastatur selbst keine Vorschläge hinzu. – kha

Antwort

21

Sie können die statische Methode 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); 
} 

Sie müssen diese Berechtigung Manifest hinzuzufügen:

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

Hinzugefügte Wörter in Settings > Language & input > Personal dictionary angezeigt.

Wenn Sie Ihre eigene Soft-Tastatur implementieren, empfehle ich Ihnen, gehen Sie Creating an Input Method. Die Vorschläge werden normalerweise in der Candidates View gezeigt. Standardmäßig gibt InputMethodService#onCreateCandidatesView() null zurück. Sie sollten diese Methode überschreiben, um die Implementierung der Vorschlagsleiste zurückzugeben.

Hier ist ein Beispielprojekt, das die Ansicht "Kandidaten" implementiert: SoftKeyboard.

Mehr Informationen:

Wort- und Satzvorschläge gehen in den Kandidaten sehen. Informationen darüber, wie Sie & erstellen können, befinden sich in dem oben genannten Beispielprojekt.

Soweit ich weiß, ist die Auswahl der Wörter/Phrasen die Verantwortung des Entwicklers. Android bietet diese nicht für Sie an. Sie werden wahrscheinlich eine Reihe von Wörterbüchern benötigen - eines für jede Sprache/Ländereinstellung, die Sie unterstützen möchten. Sie können auch ein Wörterbuch mit benutzerdefinierten Wörtern pflegen.

Androids Standard-Tastatur verwendet diese: Link

Wenn Sie eins von diesen herunterladen, entpacken und öffnen Sie mit einem Texteditor:

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 

Wie ersichtlich, wird die Frequenz spielt eine zentrale Rolle, die die bei der Bestimmung Eignung eines Wortes als Vorschlag. Wahrscheinlich möchten Sie nicht tachometer vorschlagen, wenn der Benutzer ta eingibt. Sie wahrscheinlich tun möchten vorschlagen take - Frequenz hilft Ihnen dort.

Autokorrektur:

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

Die Flaggen zeigen Angemessenheit:

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

Selbst wenn Sie diese Wörterbücher verwenden entscheiden, wird der Code, sie zu analysieren und sinnvolle Vorschläge erhalten wird, von Ihnen kommen.

Zwei Artikel (beide von Peter Kankowski), die über predictive text input & spelling correction sprechen:

Using DAWG for predictive text input

Using Ternary DAGs for Spelling Correction

CandidatesView:

Das erste, was Sie über die CandidatesView wissen sollten : Es ist optional. In der Tat, LatinIME (Android-Standard-Soft-Tastatur) verwendet es nicht. Stattdessen hat LatinIME eine eigene Implementierung - SuggestionStripView - die ähnlich ist. Das Standardverhalten von InputMethodService#onCreateCandidatesView() ist, null zurückzugeben. Wenn Sie Ihre eigene Implementierung bereitstellen möchten, überschreiben Sie diese Methode nicht.

Sie müssen entscheiden, wie Ihre CandidatesView aussehen soll. Eine mögliche Implementierung kann ein HorizontalScrollView sein. Nachdem Sie Ihre Vorschläge ausgewertet haben (zum Beispiel, Benutzer beginnen zu schreiben "as", und Ihre Vorschlagslogik gibt Ihnen eine List<String> enthält "hat", "war", "assist", "fragen", "gefragt", "fragen", "nehme an"), erstellen Sie &, fügen Sie TextViews hinzu und halten Sie diese Zeichenfolgen an die HorizontalScrollView(LinearLayout). Auf diese Weise kann der Benutzer horizontal blättern und das gewünschte Wort auswählen, indem er darauf klickt.

Es liegt an Ihnen zu entscheiden, ob Sie die API verwenden oder die CandidatesView selbst behandeln. Wenn Sie die API verwenden möchten, überschreiben Sie InputMetodService#onCreateCandidatesView(), blähen Sie Ihr benutzerdefiniertes Layout auf, und geben Sie es zurück. Halten Sie einen Verweis darauf, damit Sie ihn bei Bedarf aktualisieren können. Verwenden Sie zur Steuerung der Sichtbarkeit CandidatesView's die Methode setCandidatesViewShown(boolean).

+0

Vielen Dank @Vikram für Ihre Antwort, aber der "UserDictionary" Code hier schlägt vor, Wörter zum Wörterbuch hinzuzufügen, aber ich möchte Wörter aus dem Wörterbuch mit den Anfangsbuchstaben des Wortes abrufen. Bitte helfen, das zu tun – Kunal

+0

@Kunal Hallo Kunal, ich habe einige weitere Informationen hinzugefügt. – Vikram

+0

Vielen Dank für Ihre Antwort. Aber können Sie mir bitte helfen, zu erklären, wie Sie mit "CandidateView" unser eigenes Layout hinzufügen können. Ich habe den Tastaturcode verwendet, den Sie in Ihrer Antwort angegeben haben, aber ihr Code ist sehr hektisch. Nicht in der Lage das zu verstehen. Ich will nur wenig Hilfe, Ruhe ich werde es selbst tun. Und noch eine Sache, wenn Sie die Fragen dieses Kommentars nicht beantworten können, ist Ihre Antwort noch akzeptabel. – Kunal

1

Wenn Sie eine benutzerdefinierte Tastatur erstellen, schlage ich vor, gehen Sie durch Creating Input Method, gibt es eine sample code, die Sie gehen können. CandidateView ist wahrscheinlich das, was Sie suchen. Dies wird im obigen Link erklärt.

Wenn Sie Inline-Rechtschreibprüfung zur Verfügung stellen möchten, würden Sie Spellchecker framework

hoffe, das hilft zu sehen.

+0

Ich möchte keine Rechtschreibprüfung hinzufügen, ich möchte Vorschläge aus dem Wörterbuch in Android-Geräten hinzugefügt hinzufügen. Bitte geben Sie ein Beispiel dafür an. – Kunal

Verwandte Themen