TextWatcher 인터페이스를 보면 beforeTextChanged / onTextChanged / afterTextChanged 함수를 오버라이딩 하여야 한다.
각각의 함수는 이름을 보면 대충 언제 구동되는지 알 수 있을 것이다.
이 인터페이스를 이용해서 입력값에 대한 실시간 변화를 감지해 낼 수 잇다. 예를 들어 가격을 입력하는 창이라던지, 글자를
입력하는 창에서 조건을 걸어 검사를 할때 유용하게 사용 할 수 있다.
이번예제는 TextWatcher 인터페이스를 이용해서 글자수를 제한 해 보는 예제이다.
하나의 입력창이 있고 , 그 입력창을 글자수를 실시간으로 반영 하며, 50자 이상일때 입력을 제한하는 Toast 메시지를 띄우는
예제이다.
화면을 살펴 보면
이런식의 예제이다. 이를 응용하면 가격표에 자동으로 , 표시를 추가하는등의 함수도 작성 할 수 있다.
쓰는 법은 간단하니 코드를 살펴 보자.
main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff"
android:gravity="center"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="9dip"
android:layout_marginTop="10dip" />
<TextView
android:id="@+id/review_length"
android:layout_marginTop="15dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="5dip"
android:layout_marginLeft="240dip"
android:text="0/50자" />
</LinearLayout>
<EditText
android:id="@+id/estimate_review_content"
android:layout_marginLeft="8dip"
android:layout_marginTop="1dip"
android:maxLength="50"
android:padding="7dip"
android:layout_width="200dip"
android:layout_height="75dip" />
</LinearLayout>
Strudy_0522.java
package com.tistory.ememomo;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Strudy_0522 extends Activity implements TextWatcher{
private EditText review_content;
private TextView review_length;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
review_content = (EditText) findViewById(R.id.estimate_review_content);
review_length = (TextView) findViewById(R.id.review_length);
review_content.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.length() >= 50)
{
Toast.makeText(Strudy_0522.this, "글은 50자 까지 입력 가능합니다.", Toast.LENGTH_SHORT).show();
}
review_length.setText( s.length() + "/50자");
}
}
EditText 입력창에 addTextChangedListener 리스너를 달아 주고 그 리스너를 이용하는건 TextView에다 넘겨주었다.
내가 처리한곳은 onTextChanged 함수 내에서 처리 했지만, 입력받기 전 중 후로 처리를 할 수 있으니 잘 살펴 보길 바란다.
출처 : http://ememomo.tistory.com/36
'Program > Android' 카테고리의 다른 글
[Android] EditText NullCheck (0) | 2015.11.02 |
---|---|
[Android] startActivityForResult(), onActivityResult() 사용하기 (0) | 2015.10.20 |
[Android]자동로그인 (0) | 2015.10.11 |
[Android]Android fragment (0) | 2015.09.14 |
안드로이드 스튜디오 메모리 문제 해결 (0) | 2015.08.21 |