Program/Android Java

Text자동 완성: AutoCompleteTextView

너구리V 2011. 9. 20. 17:57

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"?>
02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03     android:orientation="vertical"
04     android:layout_width="fill_parent"
05     android:layout_height="fill_parent" >
06      
07     <!-- AutoCompleteTextView에서 발생하는 event 확인용 -->
08     <TextView 
09         android:id="@+id/textview"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content"
12         android:text="No input yet" />
13      
14     <!-- AutoCompleteTextView layout -->
15     <AutoCompleteTextView
16         android:id="@+id/auto"
17         android:layout_width="fill_parent"
18         android:layout_height="wrap_content"
19         android:completionThreshold="1" />
20 </LinearLayout>

 

 

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;
10 // Activity에서 상속하여 android.text.TextWatcher interface를  구현하는
11 // MyAutocompleteTextView 구현
12 public class MyAutoCompleteTextView extends Activity
13             implements TextWatcher {
14      
15     // 사용자 입력과 비교할 Data set
16     String items[] = {"USA", "China", "Japan", "Korea", "Korean"};
17      
18     TextView tv;
19     AutoCompleteTextView autotext;
20          
21     /** Called when the activity is first created. */
22     @Override
23     public void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.main);
26      
27         // tv, autotext 객체를 main.xml에 선언된 객체로 초기화
28         tv = (TextView)findViewById(R.id.textview);
29         autotext = (AutoCompleteTextView)findViewById(R.id.auto);
30          
31         // String 형을 자료로 가지는 ArrayAdapter 선언/초기화
32         // this: context to use
33         // android.R.layout.simple_dropdown_item_1line: 안드로이드 라이브러리에 기본으로 선언된 layout
34         // items: 사용자 입력과 비교할 data set
35         ArrayAdapter <String> aa;
36         aa = new ArrayAdapter <String> (this,
37                                         android.R.layout.simple_dropdown_item_1line,
38                                         items);
39         // autotext 객체에 아답터로 aa 설정
40         autotext.setAdapter(aa);
41          
42         // autotext객체에서 발생하는 text changed event의 listener로 본 activity 설정
43         autotext.addTextChangedListener(this);       
44     }
45      
46     // autotext객체의 text가 바뀔때마다 호출 되는 callback
47     public void afterTextChanged(Editable s){
48         tv.setText(autotext.getText());
49     }
50      
51     // TextWatcher interface의 abstract method. 사용하지 않더라도 구현 필요.
52     public void beforeTextChanged(CharSequence s, int start, int count, int after){
53          
54     }
55      
56  // TextWatcher interface의 abstract method. 사용하지 않더라도 구현 필요.
57     public void onTextChanged(CharSequence s, int start, int before, int count){
58          
59     }   
60 }

 

 

다음은 실행 화면이다.

Korea, Korean, USA, China, Japan가 data set으로 등록되어 있어 해당 단어의 첫 글자를 입력하면 그 그자로 시작하는 단어가 입력 창 밑에 나타나며, 원하는 item을 클릭하거나 계속 키보드로 입력을 진행 할 수 있다.

반응형

'Program > Android Java' 카테고리의 다른 글

안드로이드에서 네이버 Image API 사용(Naver Image Feed)  (0) 2011.09.21
안드로이드 앱 커스텀 글꼴 넣기  (0) 2011.09.21
안드로이드 달력  (0) 2011.08.17
gps 상태보고 튀게만들기  (0) 2011.07.11
c2dm  (0) 2011.07.11