메뉴 건너뛰기

조회 수 616 추천 수 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
번호 제목 날짜 조회 수
257 [하이브리드앱] userAgent를 이용해서 웹 / 앱 접속 구분하기 2021.09.30 1391
256 [하이브리드앱] 링크를 웹뷰가 아닌 새로운 브라우저에서 열기 2021.09.30 466
255 Firebase - 푸시알림 보내기 (2) 2021.09.30 837
254 Firebase - 푸시알림 보내기 file 2021.09.30 442
253 앱 번들(Android App Bundle) 만들기 file 2021.09.14 368
252 [Android] 퍼미션 권한체크(테드퍼미션) 2021.09.14 680
251 안드로이드 액티비티 세로고정 2021.09.14 254
250 안드로이드 - 커스텀 폰트(Custom Font) 적용하기 file 2021.04.02 392
249 안드로이드 - RecyclerView의 ViewType 구분하기 file 2021.04.02 995
248 안드로이드 - 리사이클러뷰 (RecyclerView) notifyDataSetChanged 실행 시 깜빡 거리는 현상 2021.04.02 819
247 안드로이드 - 갤러리에서 이미지 가져오기 2021.04.02 719
246 안드로이드 - 플로팅 액션 버튼(Floating Action Button) 사용법 file 2021.04.02 1050
» 안드로이드 - Text 입력 이벤트 처리 - TextWatcher file 2021.04.02 616
244 안드로이드 - KeyEvent(키 이벤트) 처리 file 2021.04.02 1282
243 안드로이드 - BottomNavigationView 사용하여 하단 메뉴 만들기 file 2021.04.02 1655
242 안드로이드 - 프래그먼트 (Fragment) 사용하기 file 2021.04.02 546
241 안드로이드 - switch를 사용법 및 구현 file 2021.04.02 1340
240 안드로이드 - RatingBar를 통해 별점주기 file 2021.04.02 921
239 안드로이드 - SharedPreferences에 앱 정보 저장하기 file 2021.04.02 442
238 안드로이드 - 뷰페이저(ViewPager) 구현 file 2021.04.02 382
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved