アンドロイドのあれこれ
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
SpellCheckerSession & SpellCheckerService スペルチェック
EditTextなどで入力された文字列のスペルチェックはAndroid 4.0 API Level 14から追加されました。
SpellCheckerSession、SpellCheckerSessionListener、TextServicesManager、一緒に使用します。
SDKにスペルチェックのサンプルデモ、HelloSpellCheckerとSampleSpellCheckerServiceというアプリがあります。
SampleSpellCheckerServiceは実行しても起動するアプリ(アクティビティ)がありません。確認する方法は
インストールしたら、「設定」->「言語と入力」->「スペルチェック」にチェックしてスペルチェック選択すると「Sample correction」が出てきて確認できます。
HelloSpellCheckerはスペルチェックを有効している場合、スペルの候補を出すためのサンプルアプリです。
SpellCheckerSession.getSuggestions() は API Level 15まで、API Level 16からは
SpellCheckerSession.getSentenceSuggestionsが推奨されています。
SpellCheckerSession、SpellCheckerSessionListener、TextServicesManager、一緒に使用します。
SDKにスペルチェックのサンプルデモ、HelloSpellCheckerとSampleSpellCheckerServiceというアプリがあります。
SampleSpellCheckerServiceは実行しても起動するアプリ(アクティビティ)がありません。確認する方法は
インストールしたら、「設定」->「言語と入力」->「スペルチェック」にチェックしてスペルチェック選択すると「Sample correction」が出てきて確認できます。
HelloSpellCheckerはスペルチェックを有効している場合、スペルの候補を出すためのサンプルアプリです。
SpellCheckerSession.getSuggestions() は API Level 15まで、API Level 16からは
SpellCheckerSession.getSentenceSuggestionsが推奨されています。
HelloSpellCheckerはスペルチェックを有効している場合、スペルの候補を出すためのサンプルアプリです。
SpellCheckerSession.getSuggestions() は API Level 15まで、API Level 16からは
SpellCheckerSession.getSentenceSuggestionsが推奨されています。
サンプルアプリを少し工夫してみる
HelloSpellCheckerのサンプルがあまりにもやさしくないのでEditTextなどを追加してSpellCheckerServiceとどのようにやりとりしているかを理解しようと思います。
SampleSpellCheckerService.javaの59行目あたりのを修正します。
HelloSpellCheckerAcitivty.java
実行イメージ
SpellCheckerSession.getSuggestions() は API Level 15まで、API Level 16からは
SpellCheckerSession.getSentenceSuggestionsが推奨されています。
サンプルアプリを少し工夫してみる
HelloSpellCheckerのサンプルがあまりにもやさしくないのでEditTextなどを追加してSpellCheckerServiceとどのようにやりとりしているかを理解しようと思います。
SampleSpellCheckerService.javaの59行目あたりのを修正します。
...
@Override
public SuggestionsInfo onGetSuggestions(TextInfo textInfo, int suggestionsLimit) {
if (DBG) {
Log.d(TAG, "onGetSuggestions: " + textInfo.getText());
}
final String input = textInfo.getText();
final int length = input.length();
//入力文字列が「an」なら候補を3個だすように
if (input.equals("an")) {
return new SuggestionsInfo(3,
new String[]{"ant", "anyone", "android"});
} else { //「an」以外なら
return new SuggestionsInfo(1,
new String[]{"候補ありません"});
}
}
...
HelloSpellCheckerAcitivty.java
public class HelloSpellCheckerActivity extends Activity implements SpellCheckerSessionListener {
private static final String TAG = HelloSpellCheckerActivity.class.getSimpleName();
private SpellCheckerSession mScs;
private TextView mMainView;
private EditText mEditText;
private Button mBtnEnter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mMainView = (TextView)findViewById(R.id.main);
mEditText = (EditText)findViewById(R.id.editText);
mBtnEnter = (Button)findViewById(R.id.btnEnter);
mBtnEnter.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
checkSpell();
}
});
}
private void checkSpell() {
String inputText = mEditText.getText().toString();
final TextServicesManager tsm = (TextServicesManager) getSystemService(
Context.TEXT_SERVICES_MANAGER_SERVICE);
mScs = tsm.newSpellCheckerSession(null, null, this, true);
//スペルチェックが有効の場合
if (mScs != null) {
//スペルチェックの取得
mScs.getSuggestions(new TextInfo(inputText), 3);
} else {
Log.e(TAG, "Couldn't obtain the spell checker service.");
}
}
//getSuggestionsのコールバック
@Override
public void onGetSuggestions(final SuggestionsInfo[] arg0) {
Log.d(TAG, "onGetSuggestions");
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < arg0.length; ++i) {
sb.append('\n');
//候補の個数
int len = arg0[i].getSuggestionsCount();
for (int j = 0; j < len; j++) {
if (j != 0) {
sb.append(", ");
}
sb.append(arg0[i].getSuggestionAt(j));
}
}
//別のスレッドで候補を表示
runOnUiThread(new Runnable() {
@Override
public void run() {
mMainView.append(sb.toString());
}
});
}
...
実行イメージ
COMMENT