with InputFilter

โจทย์ : สร้างกล่องรับข้อความที่ไม่สามารถกรอก #&-!@ ได้ และมีความยาวตัวอักษรทั้งหมดอยู่ที่ 50 ตัวอักษร

<EditText
android:id="@+id/myEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
.....
android:inputType="textVisiblePassword"
android:maxLength="50" />

สร้างกล่องข้อความโดยกำหนด [maxLength] เป็นความยาวที่ต้องการ จากนั้นมากำหนดข้อความที่ไม่สามารถกรอกได้

String blockCharacterSet = "#&-!@";

จากโจทย์สามารถเปลี่ยนข้อความที่ไม่ต้องการให้แสดงเป็นอย่างอื่นได้ ช่องว่างก็สามารถใส่ได้ (เว้นวรรค)

InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source != null){
if (source.length() == 1 &&
blockCharacterSet.contains(("" + source))) {
return "";
}
}
return null;
}
};

จากโค๊ดด้านบนเป็นการกรองตัวอักษรที่รับเข้ามา [source] มีการตรวจ null ก่อนที่จะทำการเทียบค่ากับ [blockCharacterSet] ที่ประกาศไว้ และการตรวจ length นั้นเพื่อนการตรวจเวลากดปุ่มลบหรือกดปุ่มอื่นที่ไม่ได้ใส่ตัวอักษรมา (สามารถใส่ Toast เพื่อแจ้งผู้ใช้งานได้กรอกตัวอักษรที่ไม่อนุญาต)

EditText editText = view.findViewById(R.id.myEditText);
editText.setFilters(new InputFilter[] {
filter, new InputFilter.LengthFilter(50)
});

ประกาศ EditText และกำหนด Filters โดยใส่ [filter] ที่เป็นการกรองข้อความด้านบนและเพิ่ม LengthFilter เพื่อกำหนดความยาวของข้อความ

filter the input of an EditText

--

--