Text자동 완성: AutoCompleteTextView
인터넷 브라우져 같은 프로그램에서 제공하는 자동 완성 기능이 첨부된 TextView이다.
사용자가 특정 시점(android:completionThreshold 속성으로 조종)까지 입력한 data를 data set의 각 아이템 첫머리와 비교하여 일치하는 모든 data set의 item을 사용자에게 제시하여 사용자 입력을 최소화 할 수 있도록 한다.
다음은 클래스 상속 구조이다.
앞에서도 언급한 android:completionThreshold 속성은 사용자가 몇 글자를 입력했을 때부터 data set과 비교를 시작할 지를 정하며, 1~n의 정수를 속성값으로 입력 받는다.
AutoCompletTextView에서 중요한 것은 selection listener interface를 적용할 수 없다는 것이다.
이유는 사용자가 data set중의 한 item을 선택할 수도 있지만, 사용자가 의도한 data가 data set 내부에 없을 경우 data를 끝까지 직접 입력 하는 경우도 있기 때문이다.
그렇기 때문에 android.text.TextWatcher interface를 사용하여 입력data의 변화에 대해 반응하여야 한다.
AutoCompleteTextView 예제 (main.xml)
01 |
<? xml version = "1.0" encoding = "utf-8" ?> |
03 |
android:orientation = "vertical" |
04 |
android:layout_width = "fill_parent" |
05 |
android:layout_height = "fill_parent" > |
09 |
android:id = "@+id/textview" |
10 |
android:layout_width = "fill_parent" |
11 |
android:layout_height = "wrap_content" |
12 |
android:text = "No input yet" /> |
16 |
android:id = "@+id/auto" |
17 |
android:layout_width = "fill_parent" |
18 |
android:layout_height = "wrap_content" |
19 |
android:completionThreshold = "1" /> |
AutoCompleteTextView 예제 (MyAutoCompleteTextView.java)
01 |
package com.holim.test; |
02 |
import android.app.Activity; |
03 |
import android.os.Bundle; |
04 |
import android.text.AutoText; |
05 |
import android.text.Editable; |
06 |
import android.text.TextWatcher; |
07 |
import android.widget.ArrayAdapter; |
08 |
import android.widget.AutoCompleteTextView; |
09 |
import android.widget.TextView; |
12 |
public class MyAutoCompleteTextView extends Activity |
13 |
implements TextWatcher { |
16 |
String items[] = { "USA" , "China" , "Japan" , "Korea" , "Korean" }; |
19 |
AutoCompleteTextView autotext; |
21 |
/** Called when the activity is first created. */ |
23 |
public void onCreate(Bundle savedInstanceState) { |
24 |
super .onCreate(savedInstanceState); |
25 |
setContentView(R.layout.main); |
28 |
tv = (TextView)findViewById(R.id.textview); |
29 |
autotext = (AutoCompleteTextView)findViewById(R.id.auto); |
35 |
ArrayAdapter <String> aa; |
36 |
aa = new ArrayAdapter <String> ( this , |
37 |
android.R.layout.simple_dropdown_item_1line, |
40 |
autotext.setAdapter(aa); |
43 |
autotext.addTextChangedListener( this ); |
47 |
public void afterTextChanged(Editable s){ |
48 |
tv.setText(autotext.getText()); |
52 |
public void beforeTextChanged(CharSequence s, int start, int count, int after){ |
57 |
public void onTextChanged(CharSequence s, int start, int before, int count){ |
다음은 실행 화면이다.
Korea, Korean, USA, China, Japan가 data set으로 등록되어 있어 해당 단어의 첫 글자를 입력하면 그 그자로 시작하는 단어가 입력 창 밑에 나타나며, 원하는 item을 클릭하거나 계속 키보드로 입력을 진행 할 수 있다.