Android 如何设置EditText字段的最大和最小字符?

Android 如何设置EditText字段的最大和最小字符?,android,Android,设置EditText字段的最大和最小长度,根据用户键入的内容检查其长度,并通知用户,如红色EditText行或不中断键入的小弹出窗口。我不知道这种编码应该是xml还是java文件 以用户名为例: xml文件 <EditText android:id="@+id/etusername" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="U

设置EditText字段的最大和最小长度,根据用户键入的内容检查其长度,并通知用户,如红色EditText行或不中断键入的小弹出窗口。我不知道这种编码应该是xml还是java文件

以用户名为例: xml文件

<EditText
    android:id="@+id/etusername"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Username"
    android:inputType="textPersonName"
    android:maxLength="25"       
    android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"/>

您需要使用TextWatcher来观察长度

etUsername.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {

        }

        @Override
        public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {

        }

        @Override
        public void afterTextChanged(final Editable s) {
          if(s.toString.length > MAX){
              /// Your code here
          }
        }
    });
这将允许用户继续在字段中键入,但允许您手动控制错误状态。请注意,如果您手动调用

etUsername.setText("...");

它将重新触发TextWatcher,并可能导致无限循环

对于最低要求,您可以执行以下操作:

使用.getText.toString.length选择最小长度

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText myEditText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myEditText = (EditText) findViewById(R.id.myEditText);
    Button button = (Button) findViewById(R.id.button);
    int lenght = 25;
    myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(lenght)});
    button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    int i = v.getId();
    if (i == R.id.button) {
        if (myEditText.getText().toString().length() < 4) {
            myEditText.setError("4 char minimum!");
        } else {
            myEditText.setError(null);
        }
    }
}

}

已回答@Adithya我是否应该为每个EditText字段单独编写此代码创建一个筛选器并将其应用于您需要的字段。谢谢您的帮助,但在您的代码中,您所说的淋浴错误是什么意思?它给了我一个错误,你可以插入任何你需要的代码,无论是显示祝酒词,还是在EditText上设置错误状态,等等。每次更改EditText的内容时,无论是通过键入还是通过setText,都将调用该回调。。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText myEditText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myEditText = (EditText) findViewById(R.id.myEditText);
    Button button = (Button) findViewById(R.id.button);
    int lenght = 25;
    myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(lenght)});
    button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    int i = v.getId();
    if (i == R.id.button) {
        if (myEditText.getText().toString().length() < 4) {
            myEditText.setError("4 char minimum!");
        } else {
            myEditText.setError(null);
        }
    }
}