9

EditText1文字と1文字(文字/アルファ)のみを受け入れるものを作成する必要があります。また、ユーザーが他の文字を入力した場合は、既存の文字を置き換える必要があります(テキスト入力の上書き方法を1つの許可された記号で上書きするなど)。

  1. プロパティでテキストの最大長を設定する方法を知っています。ただし、1に設定すると、ユーザーが既存の文字を削除する前に他の文字を挿入できなくなります。しかし、手動で削除せずに、既存の文字を新しく入力した文字に自動的に置き換えたいと思います。どうやってするか?

  2. で数字のみを許可するようにプロパティを設定する方法は知っていますが、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だけが欲しいです。

sgarmanCharacter.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ですか?

4

3 に答える 3

11

この 1 行をレイアウト xml ファイルに追加すると、Android が自動的に処理を行います。

android:maxLength="1"

たとえば、editText要素にプロパティとして追加する必要があります。

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:maxLength="1" >

私は同じ問題に直面し、このより簡単な解決策を見つけました。これは古い質問であることは知っていますが、このリンクを開く人にとって簡単になるように回答を掲載することにしました。

そして、このブログの所有者に感謝することを忘れてはなりません。このブログから回答を引用しました!

于 2013-07-07T21:10:13.430 に答える
4

試す:

s.delete(0, 1);
Selection.setSelection(s, s.length());
于 2011-04-05T21:06:08.003 に答える
3

私は同じことをしたかったので、コードを afterTextChanged(Editable s) で使用し、このように editText に 1 つのフィルターを設定しました。

editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(2)});

私たちが望んでいたように機能しました。

于 2017-06-25T13:19:10.170 に答える