私は Android ソフトキーボードに取り組んでいます。キーボードのレイアウトを作成しましたが、EditText に単語を入力したときに表示される候補を組み込む方法がわかりません。
たとえば、「Kn」と入力すると、「Known」と「Known」が候補に表示されます。
そこで質問があります。
1)Android ソフトキーボードに候補を含めるにはどうすればいいですか?
2)独自の提案リストを追加する方法はありますか?
よろしくお願いします。すでに
確認しましたこれそしてこれしかし、適切な答えを見つけることができませんでした。どなたか助けていただければ幸いです。
編集
下の図に示すように、キーボードのすぐ上に候補を表示したいと思います。
ベストアンサー1
静的メソッドを使用できますUserDictionary.Words.addWord(....)
:リンク
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 を返します。提案バーの実装を返すには、このメソッドをオーバーライドする必要があります。
以下は、候補者ビューを実装するサンプル プロジェクトです。ソフトキーボード。
より詳しい情報:
単語とフレーズの提案は候補ビューに表示されます。これを作成して入力する方法については、上記のサンプル プロジェクトに記載されています。
私の知る限り、提案する単語やフレーズの選択は開発者の責任です。Android はそれらを提供しません。おそらく、サポートする予定の言語/ロケールごとに 1 つずつ、辞書のセットが必要になるでしょう。ユーザーが指定した単語の辞書を維持することもできます。
Android のデフォルトのキーボードでは以下が使用されます。リンク
これらのいずれかをダウンロードした場合は、解凍してテキスト エディターで開きます。
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
。する提案したいのはtake
、頻度が役立つということです。
自動補正:
word=id,f=99,flags=,originalFreq=99
shortcut=I'd,f=whitelist
フラグは適切性を示します:
word=goddamn,f=0,flags=offensive,originalFreq=62
これらの辞書を使用することに決めたとしても、それらを解析して意味のある提案を取得するためのコードは自分で作成する必要があります。
predictive text input
&について論じた 2 つの記事 (どちらも Peter Kankowski 著) spelling correction
:
候補者表示:
CandidatesView について最初に知っておくべきことは、これがオプションであるということです。実際、LatinIME
(Android のデフォルトのソフト キーボード) はこれを使用しません。代わりに、同様のLatinIME
独自の実装がありますSuggestionStripView
。のデフォルトの動作はInputMethodService#onCreateCandidatesView()
null を返すことです。独自の実装を提供することを選択した場合は、このメソッドをオーバーライドしないでください。
CandidatesView の外観を決定する必要があります。 1 つの実装として が考えられますHorizontalScrollView
。 提案を評価した後 (たとえば、ユーザーが「as」と書き始めると、提案ロジックによってList<String>
「has」、「was」、「assist」、「ask」、「asked」、「asking」、「assume」を含む が提示されます)、TextViews
これらの文字列を保持する を作成して に追加しますHorizontalScrollView(LinearLayout)
。 こうすることで、ユーザーは水平にスクロールし、目的の単語をクリックして選択できます。
API を使用するか、 を自分で処理するかは、ユーザー次第ですCandidatesView
。API を使用する場合は、 をオーバーライドしInputMetodService#onCreateCandidatesView()
、カスタム レイアウトを拡張して返します。 レイアウトへの参照を保持して、必要に応じて更新できるようにします。CandidatesView's
可視性を制御するには、 メソッド を使用しますsetCandidatesViewShown(boolean)
。