私のアクティビティでは、ファイル名をキャプチャするための EditText があります。私は TextWatcher を使用して、ユーザーがファイル名に使用したくない特定の文字を入力できないようにしています。基本的に、ユーザーに次の文字のみを入力してもらいたい: [a-zA-Z_0-9]。
@Override
public void afterTextChanged(Editable text) {
String textStr = text.toString();
int length = text.length();
if (!Pattern.matches("\\w*", textStr)) {
text.delete(length-1, length);
}
}
編集: onCreate(...) にさらにコードを追加する
fileNameEditText = (EditText)findViewById(R.id.UploadPhoto_fileNameEditText);
fileNameEditText.addTextChangedListener(this);
レイアウト xml ファイル内
<EditText
android:id="@+id/UploadPhoto.fileNameEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20sp"
android:layout_marginRight="10sp"
android:layout_toRightOf="@id/UploadPhoto.fileNameLabel"/>
これは、ユーザーが「\」や「.」などを入力できないようにすることで、完全に機能します。私が抱えている問題は、これらの文字を入力すると、単語候補ボックスに表示されることです。バックスペースを使用して文字を削除しようとすると、最初に提案から削除されるため、面倒です (文字が EditText ボックスに表示されない場合でも)。
不要な文字が単語候補ボックスに表示されないようにするにはどうすればよいですか?
以下のスクリーンショットを参照してください。「-」(ハイフン) が提案ボックスに表示されますが、EditText には表示されないことに注意してください。また、提案ボックスのハイフンの後に別の有効な文字があることにも注意してください。これも EditText には表示されません。これにより、ハイフンが EditText に含まれていなくても、ユーザーがハイフンを削除するまで、それ以上のテキストを入力できなくなります。
更新: 同じ問題が発生し、TextWatcher の代わりに InputFilter を使用して再現できます。
更新:私の目標は提案を完全に抑制することではないことを明確にしたいと思います。問題は、特定の文字が EditText に表示されないようにしても、それらの文字が提案に表示されることです。私の目標 (報奨金の目的) は、同じ特定の文字が提案に表示されないようにすることです。