프로그래밍/안드로이드

안드로이드 - 자동 완성 기능 만들기(AutoCompleteTextView, MultiAutoCompleteTextView)

가카리 2015. 8. 15. 15:09
반응형

 

AutoCompleteTextView 클래스를 사용하면 자동 완성 기능은 제공 할 수 있습니다.

 

이름은 TextView로 되어있지만 EditText의 서브 클래스입니다.

후보 문자열의 경우 어댑터로부터 받는다.

 

void setAdapter(T adapter)

 

completionThreshold 속성 : 몇 자까지 입력했을 때 후보 목록을 보여줄 거인가를 의미 보통 1이 무난

completionHint 속성 : 후보 목록 아래쪽에 도움말 문자열 지정

 

 

예제 소스

TextView 한개와 AutoCompleteTextView 한 개만 배치하였다.

activity_auto_complete.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

    <TextView

     android:layout_width="match_parent"

     android:layout_height="wrap_content"

     android:text="아래 에디트에 단어를 입력하시오."

     />

    <AutoCompleteTextView

     android:id="@+id/autoedit"

     android:completionThreshold="1"

     android:layout_width="match_parent"

     android:layout_height="wrap_content"

     android:completionHint="목록에서 원하는 단어를 탭하세요"

     />

 

</LinearLayout>

 

자바 파일

AutoComplete.java

 

package com.example.autocomplete;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.AutoCompleteTextView;

 

public class AutoComplete extends Activity {

    

    //자동완성을 위한 스트링 리스트

    String[] arWords = new String[]{

        "가구", "가로수", "가방", "가슴", "가치", "가훈", "나그네", "다리미",

        "above", "about", "absolute", "access", "activity", "adjust"

    };

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_auto_complete);

      

        //어댑터를 만들고 자동완성 스트링 리스트와 연결해줌

        ArrayAdapter<String> adWord = new ArrayAdapter<String>(this,

                android.R.layout.simple_dropdown_item_1line, arWords);

        AutoCompleteTextView autoEdit = (AutoCompleteTextView)findViewById(R.id.autoedit);

        

        //어댑터 세팅해줌

        autoEdit.setAdapter(adWord);

    }

 

}

 

실행 화면

 

가를 치면 아래 자동문장 리스트가 나온다

 

 

만약 자동완성기능으로 여러 개의 단어를 입력받고 싶다면 MultiAutoCompleteTextView를 사용해야된다.

 

기존과는 다른점은 띄어쓰기나 콤마로 구분을 하니까 setTokenizer 메소드를 사용한다는 점이다.

 

예제는 다음과 같다.

acitivity_main.xml 파일

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

    <TextView

     android:layout_width="match_parent"

     android:layout_height="wrap_content"

     android:text="아래 에디트에 단어를 입력하시오."

     />

    <MultiAutoCompleteTextView

     android:id="@+id/autoedit"

     android:completionThreshold="1"

     android:layout_width="match_parent"

     android:layout_height="wrap_content"

     android:completionHint="목록에서 원하는 단어를 탭하세요"

     />

 

</LinearLayout>

 

자바 파일

MainActivity.java

 

package com.example.ch13_autocomplete_2;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.MultiAutoCompleteTextView;

 

 

public class MainActivity extends Activity {

    String[] arWords = new String[]{

        "가구", "가로수", "가방", "가슴", "가치", "가훈", "나그네", "다리미",

        "above", "about", "absolute", "access", "activity", "adjust"

    };

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        

        ArrayAdapter<String> adWord = new ArrayAdapter<String>(this,

                android.R.layout.simple_dropdown_item_1line, arWords);

        

        MultiAutoCompleteTextView autoEdit = (MultiAutoCompleteTextView)

                findViewById(R.id.autoedit);

        autoEdit.setAdapter(adWord);

        //AutoCompleteTextView 다른점은 아래 한줄 뿐이다.

        autoEdit.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

        

    }

 

    

}

 

실행 화면

 

 

그리고 어댑터가 이해가 안되면 다음 링크로 가서 이해합시다.

 

http://warmz.tistory.com/763