반응형
개요
이번에는 안드로이드 EditText에서 특정한 문자만 입력가능한 방법에 대해서 알아보도록 하겠습니다.
설명
ps) 저는 다이얼로그를 이용하여 EditText를 만들고 거기서 설정을 해주었습니다.
protected class CustomInputFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
Pattern ps = Pattern.compile("^[0-9]*$");
if(source.equals("") || ps.matcher(source).matches()){
return source;
}
Toast.makeText(getApplicationContext(), "1자리 숫자 만 입력 가능합니다 문자를 입력했으므로 지운다음 다시 숫자를 입력해주세요.", Toast.LENGTH_SHORT).show();
return "";
}
}
이부분이 특정 입력만을 받는 Filter 함수인데 Pattern.compile(); 부분에 정규화식을 넣으면 됩니다.
한글만 입력 되도록 : "^[ㄱ-ㅣ가-힣]*$"
영어만 입력 되도록 : "^[a-zA-Z]*$"
숫자만 입력 되도록 : "^[0-9]*$"
영어 숫자만 입력되도록 할려면 : "^[-_a-zA-Z0-9]+$" 이런식으로 해주면 됩니다.
EditText에 적용하는 방법은
private void dialogtime() {
AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
ad.setTitle("시간설정(분)"); // 제목 설정
ad.setMessage("ex) 5분 -> 5 "); // 내용 설정
// EditText 삽입하기
final EditText et = new EditText(MainActivity.this);
et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1),new CustomInputFilter()});
et.setText(Integer.toString(5));
ad.setView(et);
// 확인 버튼 설정
ad.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.v(TAG, "Yes Btn Click");
// Text 값 받아서 로그 남기기
String value = et.getText().toString();
txt_timer.setText("0"+value+":00:00");
dialog.dismiss(); //닫기
// Event
}
});
// 취소 버튼 설정
ad.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.v(TAG, "No Btn Click");
dialog.dismiss(); //닫기
// Event
}
});
// 창 띄우기
ad.show();
}
다이얼로그 를 만든부분이고 여기서
et.setFilterset.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1),new CustomInputFilter()}); 이부분이 입력을 제한 하고 글자수를 1개만 입력 되도록 제한 한 부분입니다.
입력을 받고 틀린값이 나오면 토스트가 나오게 되는데 이때 입력한 문자는 보이지 않지만 직접 타이핑을 통해 지워야 한다는 단점이 있습니다. 그걸 해결하기 위해선 값이 잘못 입력되면 setText 로 null값을 넣어 주면 될 거 같지만 아직 부족해서 구현하지 못했습니다.
반응형
'안드로이드 > Andorid(안드로이드)' 카테고리의 다른 글
안드로이드 (리스트뷰 get(index) 활용) (0) | 2019.12.26 |
---|---|
Android (안드로이드 Handler 사용) (1) | 2019.12.08 |
Android(안드로이드 Notification 알림) (0) | 2019.12.04 |
Android (안드로이드 카운트다운 Timer) (0) | 2019.12.02 |
Android (안드로이드 xml 사이즈 layout_weight 조절) (0) | 2019.12.02 |