Mục tiêu
Giới hạn số ký tự nhập vào EditText (ví dụ max 5 ký tự) và hiển thị lỗi khi vượt quá.
Cách làm: TextWatcher
Bước 1: Tạo project
Bước 2: Layout activity_main.xml
<LinearLayout ... android:gravity="center" android:background="#33FFFF00" android:orientation="vertical">
<EditText android:id="@+id/text" android:textSize="18sp" android:layout_width="match_parent" android:layout_height="wrap_content" />
</LinearLayout>
Bước 3: MainActivity.java
public class MainActivity extends AppCompatActivity {
EditText editText;
private static final int MAX_LENGTH = 5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.text);
editText.addTextChangedListener(new TextWatcher() {
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
if (s.length() > MAX_LENGTH) {
editText.setError("Chỉ cho phép " + MAX_LENGTH + " ký tự");
} else {
editText.setError(null);
}
}
});
}
}
3 callback của TextWatcher:
beforeTextChanged: Trước khi text thay đổi (chưa áp dụng).onTextChanged: Khi text đang thay đổi.afterTextChanged: Sau khi text đã thay đổi (an toàn để sửa đổi EditText).
→ Nên dùng afterTextChanged để validate/setError.
Kết quả
Nhập ≤ 5 ký tự: bình thường.
Nhập > 5 ký tự: Hiện error đỏ dưới EditText:

Mở rộng
- Hiển thị counter:
TextInputLayoutvớiapp:counterEnabled="true" app:counterMaxLength="5". - Ngăn nhập vượt quá:
InputFilter.LengthFilter(5).
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(5)});