EditText
1文字と1文字(文字/アルファ)のみを受け入れるものを作成する必要があります。また、ユーザーが他の文字を入力した場合は、既存の文字を置き換える必要があります(テキスト入力の上書き方法を1つの許可された記号で上書きするなど)。
プロパティでテキストの最大長を設定する方法を知っています。ただし、1に設定すると、ユーザーが既存の文字を削除する前に他の文字を挿入できなくなります。しかし、手動で削除せずに、既存の文字を新しく入力した文字に自動的に置き換えたいと思います。どうやってするか?
で数字のみを許可するようにプロパティを設定する方法は知っていますが、
EditText
文字のみを許可する方法がわかりません。したがって、2番目の質問は、EditText
?の文字のみを許可する方法です。
現在EditText
、次のコードで最大テキストサイズ=2を使用しています。
final EditText editLetter = (EditText)findViewById(R.id.editHouseLetter);
editLetter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if (s!=null && s.length()>1){
editLetter.setText(s.subSequence(1, s.length()));
editLetter.setSelection(1);
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
重要なのは、ユーザーが2番目の文字を入力したときに、最初の文字を削除する必要があるということです。テキストサイズを2にすると、ユーザーは1つの文字を入力した後で別の文字を入力できます。
私はそれがどのように機能するかを本当に理解していませんが、それは理解しています:)。さらに、カーソルをEditText
最後の位置に向ける必要がありました。これは、カーソルが常に先頭に移動し、何も入力できなくなるためです。理由もわかりませんでした。
このソリューションの主なポイントは、2文字のサイズEditText
であるということですが、1文字のサイズが必要です。そして、それは文字(chars / alpha)以外のものを入力することを可能にし、私はcharsだけが欲しいです。
sgarmanとCharacter.isLetter()
functionによって提供されるアドバイスを使用すると、afterTextChanged
メソッドは次のようになります。
public void afterTextChanged(Editable s) {
int iLen=s.length();
if (iLen>0 && !Character.isLetter((s.charAt(iLen-1)))){
s.delete(iLen-1, iLen);
return;
}
if (iLen>1){
s.delete(0, 1);
}
}
この場合、使用する必要がないことを発見しましたSelection.setSelection
。これで、文字の入力のみを許可するフィルターが追加されました。それは私が望むほとんどの答えです。残っているのは、1シンボルサイズで同じことを行う方法だけEditText
ですか?