[안드로이드] EditText 화폐 단위 표시 (세자리 콤마)
[안드로이드] EditText 화폐 단위 표시 (세자리 콤마)
사용자에게 화폐를 입력 받아 표시해줄 경우가 종종 있습니다.
이럴 때 입력 받은 숫자를 원화 단위 (1,000,000 과 같이 ) 로 바로 바꿔주는 방법입니다.
1. Result
2. Step by Step
2-1 Layout 구성
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.charlie.wontest.MainActivity">
<EditText
android:id="@+id/wonEt"
android:hint="금액을 입력해주세요."
android:paddingLeft="8dp"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:layout_centerInParent="true"
android:inputType="number"
android:gravity="end"
/>
</RelativeLayout>
- Layout 은 최대한 간단하게 구성해봤습니다. inputType 은 숫자만 입력 받게 설정해 주었고, 금액은 오른쪽에서부터 작성되도록 gravity 는 end 로 설정하였습니다.
2-2 화폐 단위 표시하기
화폐 단위 표시를 위해
DecimalFormat
과TextWatcher
를 사용합니다.private DecimalFormat decimalFormat = new DecimalFormat("#,###"); private EditText wonEt; private String result="";
먼저 멤버 변수로 EditText와 DecimalFormat 를 선언해줍니다. 여기서
new DecimalFormat("#,###")
; 이 부분이 원화 단위로 글자를 변경시켜주는 부분입니다. 소수점이나 다른 단위 표시가 필요하신 분들은 저 부분을 변경해주시면 됩니다.TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { if(!TextUtils.isEmpty(charSequence.toString()) && !charSequence.toString().equals(result)){ result = decimalFormat.format(Double.parseDouble(charSequence.toString().replaceAll(",",""))); wonEt.setText(result); wonEt.setSelection(result.length()); } } @Override public void afterTextChanged(Editable editable) { } };
EditText 의 글자 변경을 감지해주는
TextWatcher
입니다.onTextChanged
메소드에서 앞서 설정한 포맷으로 문자를 변경해줍니다.if 문 안에
!TextUtils.isEmpty(charSequence.toString())
이 부분은 EditText 가 비어있지 않을 때만 실행한다는 구문입니다.다음 조건인
!charSequence.toString().equals(result)
부분은 TextWatcher 는 계속해서 EditText 를 검사하게 되는데 그 때마다 메소드를 반복 실행합니다. 아직 변경된 부분이 없는데 반복적으로 포맷 변경을 하고 setText를 하는 동작은 불필요 하기 때문에 이 전의 결과 값과 동일하면 실행시키지 않는 구문입니다.@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wonEt = (EditText) findViewById(R.id.wonEt); wonEt.addTextChangedListener(watcher); }
- 마지막으로 EditTextView 에 리스너를 설정해주면 끝입니다.
Read other posts