2

私のアクティビティでは、ファイル名をキャプチャするための 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 に表示されないようにしても、それらの文字が提案に表示されることです。私の目標 (報奨金の目的) は、同じ特定の文字が提案に表示されないようにすることです。

ここに画像の説明を入力

4

3 に答える 3

1

の一部の文字を制限するには、 InputFilterを使用する必要がありますEdittext

InputFilter filter = new InputFilter() { 
        public CharSequence filter(CharSequence source, int start, int end, 
Spanned dest, int dstart, int dend) { 
                for (int i = start; i < end; i++) { 
                        if (!Character.isLetterOrDigit(source.charAt(i))) { 
                                return ""; 
                        } 
                } 
                return null; 
        } 
}; 

edit.setFilters(new InputFilter[]{filter}); 
于 2011-10-01T07:25:11.820 に答える
0

レイアウト xml ファイルでそれを行うことができ、あなたが尋ねたことを簡単な方法で達成できます。次の行を挿入します。

android:numeric="your custom elements"
android:digits="your custom elments"
android:inputType="your custom elements"

これらを実装すると、必要な単語を入力できるようになります。

于 2011-10-04T12:22:09.853 に答える
0

エミュレーターが textNoSuggestions と対応する FLAG (TYPE_TEXT_FLAG_NO_SUGGESTIONS) をサポートしていないようです。本当に面倒ですが、エミュレーターのユーザー向けに開発しているわけではありません。これに夢中になるべきではありません。ほとんどすべてのデバイスで正常に動作します。

(このフラグは API レベル 5 以降でのみ使用できることに注意してください)

于 2011-10-04T09:19:27.853 に答える