Android Studio

Android Studio EditText 최소 글자 제한하기(최소 N글자 이상 입력하게끔)

Bubbles 2021. 3. 28. 04:40

졸업작품이 거의 다 마무리 되어가는 시점에서 잡다한 것들 조금 더 추가해보려고 손대고 있던 중, 회원가입시 ID나 PW의 최소 글자수 제한이 있으면 좋겠다고 생각했다. (애초에 회원가입은 너무 길어서 문제된다기보다는 너무 짧아서 문제되는 경우가 많으니) 보통 EditText에서 최대글자수 N자 안 넘게끔 만드는건 서치가 잘 되는데 반대의 경우는 잘 안나오길래 혹시 도움이 될까 싶어서 포스팅하는 글 :D

 

* 결론적으로는 EditText에다가 setOnFocusChangeListener를 해주면된다.

아래 첨부한 코드는 안드로이드 스튜디오에서 내가 실제 사용한 코드를 가져왔다. 

//id_input은 EditText이름이다. 위에 선언되어 있다고 가정
id_input = findViewById(R.id.input_id);
id_input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
	@Override
    public void onFocusChange(View v, boolean hasFocus) {
	    if(!hasFocus) {
	    	if(id_input.length() < 8) {
	        	AlertDialog.Builder builder = new AlertDialog.Builder(CreateAccount.this,R.style.MinLengthDialogTheme);
				builder.setMessage("ID는 8자 이상이어야 합니다.");
				builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
	            	@Override
	                public void onClick(DialogInterface dialog, int which) {
	                	dialog.dismiss();
	                }
	            });
	            builder.show();
	    	}
	    }
    }
});

id_input이라는 EditText에 입력된 string의 길이가 8 미만일 경우, 사용자가 다른 곳으로 포커스를 옮겼을때, 즉 입력하는 edittext칸을 벗어났을 때 바로 AlertDialog를 띄워준다. (화면에서 잘라오느라 이미지가 좀 작음...)

그리고 아래 코드로 style.xml에 내가 지정해둔 style을 불러와서 배경색을 바꿔주었다. 

AlertDialog.Builder builder = new AlertDialog.Builder(CreateAccount.this,R.style.MinLengthDialogTheme);

그러고 나서 ok 버튼이 눌리면 dismiss()해줌으로써 창을 내린다. 물론 저렇게 경고를 띄워서 ok눌렀을 시 안고치는 사람도 있을 수 있으니 최종적으로 서버에 전달하기 전에 Toast메시지 띄우는 처리도 해두었다. 

if((id_input.length() < 8) || (pw_input.length() < 8)) {
	Toast.makeText(getApplicationContext(), "ID 및 비밀번호는 8자이상이어야 합니다.", Toast.LENGTH_SHORT).show();
}

참고1. onFocusChange의 인터페이스를 살펴보면, 아래와 같다. 

focus가 움직여져서 view가 바뀌었을때 호출된다. 


참고2. TextWatcher 

직접 사용해본 결과 한 글자 칠때마다 계속 8자 이상 입력해줘! 8자 이상 입력해줘! 이래서 못 쓴다.. 물론 내가 익숙치 않아서 제대로 사용하지 못한 걸 수도 있지만...

아래 표는 TextWatcher에 정의되어 있는 함수이다. 

저기서 afterTextChanged를 사용하면, text에 변화가 일어날 때마다 호출되기때문에 ^_^... 최대글자수 제한에는 유용하게 쓸 수 있을지언정 최소 글자수 제한에는 사용이 불편하다. 


쨌든 따로 확인버튼을 만들어서 그때 처리할게 아니라 EditText입력 끝나고 바로 최소글자수 제한 검사를 할거라면 위에 써둔 setOnFocusChangeListener을 유용하게 쓸 수 있을것 같다. (공식 문서 링크 첨부)

developer.android.com/reference/android/view/View.OnFocusChangeListener

 

View.OnFocusChangeListener  |  Android 개발자  |  Android Developers

 

developer.android.com