반응형

개요

 

이번에는 안드로이드 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값을 넣어 주면 될 거 같지만 아직 부족해서 구현하지 못했습니다. 

 


 

반응형

+ Recent posts