메뉴 건너뛰기

조회 수 557 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

안드로이드 앱에서 사용자로부터 값을 입력받을 때 사용되는 View 위젯 중 EditText가 있습니다. 앱을 구현하다 보면 이러한 EditText의 Text 입력값이 변경될 때마다 특정 작업을 처리해야 할 경우가 있습니다. 

이때는 TextWatcher 인터페이스를 구현하여 EditText의 이벤트 리스너로 등록하여 처리가 가능합니다.

 

 

 


 

1. TextWatcher 인터페이스 필구 구현 함수들

■ beforeTextChanged(CharSequence s. int start, int count, int after)

  • CharSequece s : 현재 EditText에 입력된 값

  • int start : s에 저장된 문자열에서 새로 추가될 문자열의 시작 위치 값

  • int count : s에 새로운 문자열이 추가된 후 문자열의 길이

  • int after : 새로 추가될 문자열의 길이

■ onTextChanger(CharSequence s, int start, int before, int count)

 

start 위치에서 before 문자열 개수만큼 문자열이 count 개수만큼 변경되었을 때 호출

  • CharSequence s : 새로 입력한 문자열이 추가된 EditText의 값을 가지고 있음

  • int start : 새로 추가된 문자열의 시작 위치 값

  • int before : 삭제된 기존 문자열의 개수

  • int count : 새로 추가된 문자열의 개수 

■ afterTextChanged(Editalbe a)

 

EditText의 Text가 변경된 것을 다른 곳에 통보할 때 사용됩니다. a.toString()을 통해 현재 EditText의 Text 값을 불러오는 게 가능합니다. EditText의 Text 변경에 따른 함수 호출 순서는  beforeTextChanged,  onTextChanger,  afterTextChanged 순으로 호출됩니다.

 

 

 


2. TextWatcher 구현 예제

먼저 Main 화면의 Xml 레이아웃 리소스입니다. 

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text=""
        android:textSize="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/editText" />
</android.support.constraint.ConstraintLayout>

▼ EditText 하나와 TextView 하나를 배치한 형태입니다. TextWatcher 구현체를 등록한 EdiText의 값이 변경될 때마다 TextView의 Text에 반영되도록 구현할 것입니다.

package com.springsthursday.textwatcher;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private EditText editText;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.getViewObject();

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
            @Override
            public void afterTextChanged(Editable s) {
                textView.setText(s.toString());
            }
        });
    }

    private void getViewObject()
    {
        editText = findViewById(R.id.editText);
        textView = findViewById(R.id.textView);
    }
}

 

 

 

▼ getViewObject() 함수에서 레이아웃 리소스 상의 TextView와 EditText의 참조 객체를 얻어옵니다. onCreate() 함수에서는 EditText의 addTextChangedListener() 함수를 통해 Text 값 변경에 따른 이벤트 리스너를 등록해주는데 익명 클래스 작성법을 통하여 TextWatcher() 인터페이스를 구현한 객체를 전달합니다.

 

 

 

 


List of Articles
번호 제목 날짜 조회 수
217 안드로이드 로그인유지 코드 2015.12.14 8807
216 안드로이드 EditText 필터링 검색 구현(adapter.getFilter().filter(cs)) file 2015.12.14 8774
215 안드로이드 webview (웹뷰) 개발 #3 - 초기 로딩화면 (splash) 띄우기 + 아이콘 적용하기 file 2015.07.17 8697
214 JAVA JDBC를 사용하여 MySQL과 연동 file 2015.11.21 8644
213 화면 해상도에 관계없는 레이아웃(Layout) 만들기 file 2015.07.16 8641
212 폰갭(PhoneGap) 에서 페이지들간의 이동 2015.06.29 8509
211 폰갭(PhoneGap) 플러그인 만들기 2015.06.29 8480
210 안드로이드 소스 코드 보호 기법 2015.06.29 8336
209 Activity Switching / 안드로이드 액티비티 전환 / 화면 전환 file 2016.06.07 8311
208 안드로이드 webview (웹뷰) 개발 #2 - 파일 첨부 및 플러그인 적용하기 file 2015.07.17 8295
207 [안드로이드] 페이스북 같은 슬라이드 메뉴 만들기 file 2015.07.21 8212
206 Android Navigation Drawer API 공개! 디자인 가이드 살펴보기 file 2015.07.29 8141
205 안드로이드 맵 API key (배포용 맵키) file 2015.07.01 8103
204 Android 와 JSP 간 파라미터 암복호화 (3) file 2016.05.26 8091
203 화면 회전에 따른 애니메이션 효과 구현하기 2015.07.16 8057
202 안드로이드 로그인 화면 만들기 file 2015.09.05 8043
201 블루투스(Bluetooth) 통신에 대해 알아보자 file 2015.07.01 7983
200 안드로이드 - 소방시설바이블 어플 소스 ( 폰갭, 폰갭플러그인, assets 폴더안의 파일 이용, pdf 리더기 선택, 유튜브재생기 선택 ) file 2015.06.29 7976
199 안드로이드 NDK 개발환경 만들기 / 이클립스 NDK 설정 file 2015.06.10 7890
198 어댑터 뷰(Adapter View) & 어댑터(Adapter) (1) file 2016.06.08 7852
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved