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 관련 정보들을 확인하려면 아래 링크를 확인해주시기 바랍니다.
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" />
ViewModel에 psShow는 텍스트 보기 체크박스 유무에 따라 True, False가 되도록 설정한 값입니다.
텍스트 보기 체크박스가 False이면 EditText는 textPassword
= TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD
텍스트 보기 체크박스가 True이면 EditText는 textVisiablePassWord
= 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()
}
}
텍스트 보기 체크박스의 Default는 False로 설정하였으며
pwShowClick()는 텍스트 보기 체크박스를 눌렀을 때 기존 psShow값의 NOT을 진행하여 반대로 바꾸어 줍니다.
pwShowClick()로 psShow가 변경되었기 때문에 EditText에 InputType이 변경됩니다.
EditText에서 3항 연산자를 이용해서
ViewModel.psShow에 값에 따라 InputType을 변경되도록 하는 것입니다.
더 좋은 방법이 존재한다면 댓글로 남겨주시면 감사하겠습니다.
'Android Studio' 카테고리의 다른 글
[Android, Kotlin] 안드로이드 어플 출시까지 한 걸음 부터(2-1), 어플리케이션 UI 만들기(Splash, Main) (0) | 2022.08.18 |
---|---|
[Android, Kotlin] 안드로이드 어플 출시까지 한 걸음 부터(1), 프로토타입 (0) | 2022.08.11 |
[Android, Kotlin] 안드로이드 어플 출시까지 한 걸음 부터(0), 프롤로그 (0) | 2022.08.06 |
[Android]Anko Library Build 실패 경험 및 해결 방법 (0) | 2022.08.03 |
[Kotlin] 안드로이드 스플래시 스크린, SplashScreen (0) | 2022.03.09 |
댓글