본문 바로가기
Android Studio

[Kotlin] 안드로이드 ViewModel + EditText.InputType 설정

by 열정적인 이찬형 2022. 5. 20.

MVVM 패턴을 공부하면서 EditText.InputType을 ViewModel 통해 바꾸려고 시도한 방법을 공유하겠습니다.


사용법

DataBinding

<layout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <import type="android.text.InputType"/>
        <variable
            name="viewModel"
            type="viewModel경로" />
    </data>

<import type = "android.text.InputType"/>를 한 이유는

 

EditText.InputType 관련 Constants를 가져오기 위해서입니다.

 

EditText.InputType 관련 정보들을 확인하려면 아래 링크를 확인해주시기 바랍니다.

 

TextView  |  Android Developers

android.net.wifi.hotspot2.omadm

developer.android.com

 

InputType  |  Android Developers

android.net.wifi.hotspot2.omadm

developer.android.com

EditText

        <EditText
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:padding="10dp"
            android:maxLength="20"
            android:inputType="@{viewModel.pwShow?InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD:InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD}"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="parent" />

 

ViewModelpsShow는 텍스트 보기 체크박스 유무에 따라 True, False가 되도록 설정한 값입니다.

 

텍스트 보기 체크박스가 False이면 EditTexttextPassword

= TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD

 

텍스트 보기 체크박스가 True이면 EditTexttextVisiablePassWord

= TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

 

다른 유형의 표현을 알아보고 싶으시면 위에 링크에 들어가서 확인해주시면 됩니다.

 

ViewModel

class RegisterPwViewModel(application: Application) : AndroidViewModel(application) {
	private val _pwShow = MutableLiveData<Boolean>()
	val pwShow : LiveData<Boolean>
        	get() = _pwShow
	init {
		_pwShow.value = false
	}
	//text Show Check Box Click
	fun pwShowClick(){
		_pwShow.value = _pwShow.value!!.not()
	}
}

 

텍스트 보기 체크박스의 DefaultFalse로 설정하였으며

 

pwShowClick()는 텍스트 보기 체크박스를 눌렀을 때 기존 psShow값의 NOT을 진행하여 반대로 바꾸어 줍니다.

 

pwShowClick()로 psShow가 변경되었기 때문에 EditText에 InputType이 변경됩니다.

 

 

EditText에서 3항 연산자를 이용해서

ViewModel.psShow에 값에 따라 InputType을 변경되도록 하는 것입니다.

 

 

 

더 좋은 방법이 존재한다면 댓글로 남겨주시면 감사하겠습니다.

 

댓글