このメッセージを「重複」としてマークすることを急がないでください。適切な例が見つかりません。editTextの文字「{」を制限したいとします。
私のコードのいくつかの変種を考えてみましょう。私はエミュレーターでのみそれらを試しました。
editName.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
String txt=s.toString();
int len=txt.length();
toastDebug("len="+myIntToStr(len));
if (len>0) {
try {
int pos=txt.indexOf("{");
if (pos>=0) s.replace(pos,pos+1,"");
}
catch(Exception e) {}
}
}
「{」をすばやく入力すると、「stackOverFlow」がクラッシュします。「abcd {{{{{{{」」とゆっくり入力するとします。最初のビューでは問題ないように見えます。editTextに「{」はありません。しかし、バックスペースを入力すると、「abcd」は削除されず、非表示の「{{{{{」」も削除されます。
「afterTextChanged」内のeditTextを変更しようとしました。以下のコードは、stackOverflowErrorを再び引き起こします。
public void afterTextChanged(Editable s) {
String txt=s.toString();
int len=txt.length();
if (len>0) {
try {
editName.setText(txt)
or
s.clear
s.append(txt)
}
catch(Exception e) {}
}
}
このようなコードを使用した多くの例では、「{」と入力すると、editTextがクリアされます。
さて、私はこのコードを次のように変更しました:
editName.setFilters(new InputFilter[] { filterName });
private InputFilter filterName = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source==null) return null;
return source.toString().replace("{","");
}
};
今では動作します。しかし、私のandroid:maxLength = "25"は機能しません。任意の数の文字を入力できます。
そのため、editTextで単純な文字を制限する方法に戸惑っています。何か案は?ありがとう!
ウィジェットにをEditText
設定し、TextWatcher
以下のロジックを挿入することで、ユーザーがに入力できる文字を制限できます。
// we are interested in this callback
@Override
public void afterTextChanged(Editable s) {
String result = s.toString().replaceAll("\\{", "");
if (!s.toString().equals(result)) {
edit.setText(result); // "edit" being the EditText on which the TextWatcher was set
edit.setSelection(result.length()); // to set the cursor at the end of the current text
}
}
\\
ので、(と他の文字のために)必要とされる{
文字は、パターンで特別な意味を持っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加