2

Toastユーザーが最大制限よりも長いテキストを挿入しようとしたときにポップアップする方法は?

<EditText
    android:maxLength="28"
    ...
 />

使用しようとしましTextWatcherたが、正しく動作しません:

public class MyActivity extends Activity implements TextWatcher
{

    // ...

    @Override
    public void afterTextChanged(Editable arg0){}

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3){}

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
    {
        if(etUsername.isFocused() && etUsername.getText().length() == 28)
            Toast.makeText(MyActivity.this, "The username must be at most 28 characters!" , Toast.LENGTH_SHORT).show();
        else if(etPassword.isFocused() && etPassword.getText().length() == 10)
            Toast.makeText(MyActivity.this, "The password must be at most 10 characters!" , Toast.LENGTH_SHORT).show();
    }
}

編集:

afterTextChangedまた、コードを内部に入れようとしましたbeforeTextChangedが、問題は解決しません。

EDIT2:

私が望むのは、 に28 文字があり、ユーザーが 29 番目の文字を追加しようとしてToastいるときにのみポップアップできることです。EditText上記の私のコードでは、に 27 文字があり、ユーザーが 28 番目の文字を挿入したToast場合にのみポップアップします。TextEdit

4

4 に答える 4

3

このソリューションは私の場合に機能します:

    @Override
    public void afterTextChanged(Editable s) {
        if(etUsername.isFocused() && etUsername.getText().toString().trim().length() > MAX_CHARS){
        etUsername.setText(s.toString().substring(0, MAX_CHARS));
        etUsername.setSelection(s.length()-1);
            Toast.makeText(getActivity(), "Maximum number of characters reached.", Toast.LENGTH_SHORT).show();
        }
    }

それが役に立てば幸い。

于 2015-11-30T02:29:42.953 に答える
3

必要な機能を実現する唯一の方法は、 に変更android:maxLengthdesiredMaxLength + 1て で長さを確認することafterTextChanged()です。length == desiredMaxLength + 1 の場合は、最後の文字を手動で削除する必要があります (つまり、 でsパラメーターを操作しますafterTextChanged(Editable s))。s afterTextChanged()変更後は再度呼び出されるため、無限ループに陥らないように注意してください。

于 2011-10-31T12:23:48.233 に答える
0

完全なコードは以下のとおりです。それは完全に機能しています。

String tempReview;
EditText et_userReview;
TextView tv_charactersRemaining;

Public void afterTextChanged(Editable s){

if(s.toString().length() <= 200) {
                 tv_charactersRemaining.setText(200 -   s.toString().length()+ " characters remaining");
                 tempReview = s.toString();
                 } else {
                 et_userReview.setText(tempReview);
                 Editable etext = et_userReview.getText();
                 Selection.setSelection(etext, 200);    
Toast.makeText(getApplicationContext(),  "No more characters You have reached the limit.", Toast.LENGTH_SHORT).show();
                 }

}

于 2013-01-02T11:46:33.873 に答える
0

それ以外の:

if(etUsername.isFocused() && etUsername.getText().length() == 28)

これを使って:

 if(arg0.length() > 28)
      {
String temp=arg0.subString(0,27)
etUsername.setText(temp);
 //Toast come's here
       }
于 2011-10-31T12:10:43.803 に答える