<com.google.android.material.textfield.TextInputLayout
android:id="@+id/budget_money_inputlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
app:hintEnabled="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView8">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/budget_money_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_budget_view_type1"
android:fontFamily="@font/inter"
android:hint="@string/budget_content_input_money"
android:inputType="numberDecimal"
android:textColor="@color/black"
android:padding="10dp"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp"
android:singleLine="true"
android:textColorHint="@color/searchoutline"
android:textSize="16sp"
android:textStyle="bold" />
</com.google.android.material.textfield.TextInputLayout>
이러한 EditText에 저는 값을 입력하면 내가 원하는 형식대로 EditText의 값을 바꿔주고 싶습니다.
//in Activity
private val decimalFormat = DecimalFormat("#,###")
private var resultMoney: String = ""
budgetMoneyEdittext.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(charSequence: CharSequence?, p1: Int, p2: Int, p3: Int) {
if(!TextUtils.isEmpty(charSequence.toString()) && charSequence.toString() != resultMoney){
if(charSequence.toString().any { it == '.' }){
resultMoney = decimalFormat.format(charSequence.toString().replace(".","").toDouble())
budgetMoneyEdittext.setText(resultMoney)
budgetMoneyEdittext.setSelection(resultMoney.length)
}else{
resultMoney = decimalFormat.format(charSequence.toString().replace(",","").toDouble())
budgetMoneyEdittext.setText(resultMoney)
budgetMoneyEdittext.setSelection(resultMoney.length)
}
}
}
override fun afterTextChanged(p0: Editable?) {
}
})
이럴 때는 addTextChangedListener를 이용하여 값이 바뀔 때만 다 EditText의 값을 바꿔주면 됩니다. 이경우 조심해줘야 하는 부분이 있습니다 예를 들어 지금 같은 상황에서는 문자열을 바꿔주는 부분이 숫자만 받습니다. 그렇기에 숫자 이외의 값을 넣어준다면 에러가 걸릴 것입니다. 그렇기에 해당오류를 사전에 막아주는 부분이 필요합니다. 또한 값 바꿔준 후 커서의 위치가 가장 끝으로 가게 해줘야 합니다. 그렇지 않는다면 커서의 위치를 매번 클릭해서 맞춰줘야 할 것입니다.