코코딩딩

[안드로이드/android] editText 색상 변경(활성화), 텍스트 변경 감지 본문

일단기록/매일기록

[안드로이드/android] editText 색상 변경(활성화), 텍스트 변경 감지

겟츄 2022. 5. 17. 10:40

editText에 사용자가 텍스트를 입력할 때 자신이 editText를 클릭한 상태라는 것을 잘 알도록 하기 위해 색상을 변경하고, editText의 최소 길이 조건을 달성 했을 때 버튼이 활성화 되게 구현하고자 한다.

 

focus가 되기 전 화면
focus가 된 화면 (클릭상태)

안드로이드에서 editText를 보면 기본 밑줄처리가 되어 있는데 이는 아래 코드와 같이 backgroundTint 를 설정해주면 색상을 변경할 수 있다.

 

<EditText
    android:id="@+id/login_id"
    android:layout_width="match_parent"
    android:layout_height="46dp"
    android:textSize="16sp"
    android:inputType="textPassword"
    android:backgroundTint="@color/Grey"
    android:layout_column="1"
    android:hint="아이디 입력"/>

 

자주 보는 editText들은 텍스트를 입력하기 위해 클릭상태(Focus)가 되면 활성화 되어 있다는 느낌을 받기 위해 색상을 변경하는 경우가 많은데 이는 아래와 같이 자바코드에서 backgroundTint를 변경하게 해주면 된다.

setOnFocusChangeListener는 유저가 클릭을해 focus상태가 되있는지를 읽는 listener이다. hasFocus를 통해 상태가 true인지 false 인지 받아올 수 있다.

 

binding.loginId.setOnFocusChangeListener(new View.OnFocusChangeListener() {
	@Override
    public void onFocusChange(View v, boolean hasFocus) {
    	if(hasFocus){
        //포커스가 활성화 된 상태
        binding.loginId.setBackgroundTintList(ContextCompat.getColorStateList(getApplicationContext(),R.color.colorPrimary));
        }else{
        //포커스가 비활성화 된 상태
            binding.loginId.setBackgroundTintList(ContextCompat.getColorStateList(getApplicationContext(),R.color.Grey));
        }
    }
});

 

다음은 editText의 텍스트변화를 감지하는 방법이다. addTextChangedListener를 사용하면 텍스트의 변화가 있을 때마다 코드를 실행 시킨다. 아래와 같은 코드를 작성하면 텍스트가 변화할 때마다 edittext의 length를 확인하게 되고 조건이 true가 될 경우 버튼을 활성화 시킨다.

 

        binding.loginId.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) {
            // 조건문으로 id의 길이가 4자리 이상 비밀번호가 8자리 이상을 설정한다.
                if(binding.loginId.length()>3 && binding.loginPw.length()>7){
                	//로그인 버튼의 투명도를 1로 하고 클릭이 되게 만든다.
                    binding.loginBtn.setEnabled(true);
                    binding.loginBtn.setAlpha(1);
                }else {
                	//조건을 충족하지 못할 경우 클릭을 막고 투명도를 0.5로 한다.
                    binding.loginBtn.setEnabled(false);
                    binding.loginBtn.setAlpha(0.5f);
                }
            }
        });