web-dev-qa-db-ja.com

Androidキーボードに提案を含める方法

Android SoftKeyboardに取り組んでいます。キーボードのレイアウトを作成しましたが、EditTextにWordを入力したときに表示される候補を含める方法がわかりません。
たとえば、「Kn」と書くと、「Known」と「Known」が候補に表示されます。
それで私の質問は-
1)Android Softkeyboard?
2)独自の提案リストを含める方法はありますか?
事前に感謝します。
すでに this および this を確認しましたが、適切な答えを見つけることができません。任意の助けいただければ幸いです。

[〜#〜]編集[〜#〜]
下の画像に示すように、キーボードの真上に候補を含めたいです。

Suggestions in keyboard

18
Kunal

静的メソッド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);
}
_

この権限をマニフェストに追加する必要があります。

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

追加された単語は_Settings > Language & input > Personal dictionary_に表示されます。

独自のソフトキーボードを実装している場合は、 入力メソッドの作成 を実行することをお勧めします。通常、提案は_Candidates View_に表示されます。デフォルトでは、InputMethodService#onCreateCandidatesView()はnullを返します。提案バーの実装を返すには、このメソッドをオーバーライドする必要があります。

候補者ビューを実装するサンプルプロジェクトを次に示します: SoftKeyboard

詳細

単語とフレーズの候補が候補者ビューに表示されます。作成方法と入力方法に関する情報は、上記のサンプルプロジェクトにあります。

私の知る限り、提案する単語/フレーズの選択は開発者の責任です。 Androidはそれらを提供しません。サポートする予定の言語/ロケールごとに1つずつ、辞書のセットが必要になる可能性があります。ユーザー指定の単語の辞書を維持することもできます。

Androidのデフォルトキーボードはこれらを使用します: Link

これらのいずれかをダウンロードした場合は、解凍してテキストエディターで開きます。

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

明らかなように、頻度は単語としての適合性を判断する上で極めて重要な役割を果たします。ユーザーがtachometerと入力したときにtaを提案したくない場合があります。あなたはおそらくdotakeを提案したいでしょう-頻度はそこであなたを助けます。

自動補正:

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

フラグは適切性を示しています。

_Word=goddamn,f=0,flags=offensive,originalFreq=62
_

これらの辞書を使用することを決定した場合でも、それらを解析して意味のある提案を取得するためのコードは、ユーザーから取得する必要があります。

_predictive text input_および_spelling correction_に関する2つの記事(両方ともPeter Kankowskiによる):

予測テキスト入力にDAWGを使用

スペル修正のためのTernary DAGの使用

CandidatesView

CandidatesViewについて最初に知っておくべきこと:これはオプションです。実際、LatinIME(Androidのデフォルトのソフトキーボード)では使用しません。代わりに、LatinIMEには独自の実装があります-SuggestionStripView-これは似ています。 InputMethodService#onCreateCandidatesView()のデフォルトの動作は、nullを返すことです。独自の実装を提供する場合は、このメソッドをオーバーライドしないでください。

CandidatesViewの外観を決定する必要があります。可能な実装の1つはHorizontalScrollViewです。提案を評価した後(たとえば、ユーザーが "as"を書き始め、提案ロジックにより、 "has"、 "was"、 "assist"、 "ask"、 "asked"、を含む_List<String>_が得られます。 「尋ねる」、「仮定する」)、作成してこれらの文字列を保持するTextViewsHorizontalScrollView(LinearLayout)に追加します。このようにして、ユーザーは水平方向にスクロールし、クリックして目的のWordを選択できます。

APIを使用するか、CandidatesViewを自分で処理するかは、あなた次第です。 APIを使用する場合は、InputMetodService#onCreateCandidatesView()をオーバーライドし、カスタムレイアウトをインフレートしてから返します。それへの参照を保持して、必要なときに更新できるようにします。 _CandidatesView's_の可視性を制御するには、メソッドsetCandidatesViewShown(boolean)を使用します。

29
Vikram

カスタムキーボードを作成している場合は、 入力メソッドの作成 を試してみることをお勧めします。 サンプルコード 以上です。 CandidateViewは、おそらくあなたが探しているものです。上記のリンクで説明されています。

インラインスペルチェッカーを提供する場合は、チェックアウトする必要があります スペルチェックフレームワーク

お役に立てれば。

1
bond