프로그래밍/안드로이드

[안드로이드] AutoCompleteTextView 자동완성 검색 기능 구현

오치리일상 2017. 8. 11. 11:00

이전 포스트에서 리스트뷰의 검색에대해 알아보았다.

 

이번에는 리스트뷰와 비슷하지만 다른 AutoCompleteTextView 에 대해 알아본다.

 

AutoCompleteTextView는 주 기능은 자동완성 기능이다. 네이버 사이트에서 검색어를 입력할때 input창 아래에 관련 단어 또는 문장이 나오는 것과 같은 기능이라 보면된다.

 

하지만 AutoCompleteTextView는 리스트뷰, 네이버와 다른점은 단어 또는 문장의 맨 첫문자부터 같은 문자의 검색이 이루어지는 것이다.

 

 

 

 

 

리스트뷰나 네이버에서 "수"를 검색하면 "채수빈, 수지" 등이 검색되지만, AutoCompleteTextView에서는 검색어 "수"가 맨 첫문자에만 매치되는 "수지"만 검색이 된다.

 

 

AutoCompleteTextView는 생소하기 하지만, 꽤 간단한 코딩으로 이루어진다.

 

 

우선 레이아웃을 보겠다.

 

* activity_main02.xml

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


        <LinearLayout
            android:layout_width="368dp"
            android:layout_height="495dp"
            android:orientation="vertical"
            tools:layout_editor_absoluteY="8dp"
            tools:layout_editor_absoluteX="8dp">
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:gravity="left|center_vertical"
                    android:paddingLeft="5dp"
                    android:textColor="#000000"
                    android:textSize="20dp"
                    android:text="AutoCompleteTextView Sample"
                    android:background="@color/colorAccent"/>
                <AutoCompleteTextView
                    android:id="@+id/autoCompleteTextView"
                    android:layout_width="match_parent"
                    android:layout_height="45dp"
                    android:gravity="center_vertical"
                    android:textColorHint="#555555"
                    android:completionHint="검색어를 입력하세요."
                    android:completionThreshold="1" />
        </LinearLayout>
</android.support.constraint.ConstraintLayout>

위와 같이 정의한다.

 

android:completionHint 는 검색시 검색 리스트 맨 하단에 뜨는 문장이다.

 

android:completionThreshold 는 검색어가 최소 몇자리일때 자동완성 검색기능을 실행할 것인가이다.

 

android:completionThreshold="2" 라면 "수"라는 한자리 문자에서는 검색이 시작안되고 "수빈"이라는 두자의 검색부터 자동완성 검색이 실행된다.

 

 

* MyAutoCompleteTextView

package com.studio572.searchlistview;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017-08-08.
 */

public class MyAutoCompleteTextView extends Activity {
    private List<String> list;          // 데이터를 넣은 리스트변수

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

        // 리스트를 생성한다.
        list = new ArrayList<String>();

        // 리스트에 검색될 데이터(단어)를 추가한다.
        settingList();

        final AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);

        // AutoCompleteTextView 에 아답터를 연결한다.
        autoCompleteTextView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line,  list ));
    }
    // 검색에 사용될 데이터를 리스트에 추가한다.
    private void settingList(){
        list.add("채수빈");
        list.add("박지현");
        list.add("수지");
        list.add("남태현");
        list.add("하성운");
        list.add("크리스탈");
        list.add("강승윤");
        list.add("손나은");
        list.add("남주혁");
        list.add("루이");
        list.add("진영");
        list.add("슬기");
        list.add("이해인");
        list.add("고원희");
        list.add("설리");
        list.add("공명");
        list.add("김예림");
        list.add("혜리");
        list.add("웬디");
        list.add("박혜수");
        list.add("카이");
        list.add("진세연");
        list.add("동호");
        list.add("박세완");
        list.add("도희");
        list.add("창모");
        list.add("허영지");
    }

}

AutocompleteTextView 의 변수에 아답터를 연결하다. 이 때 아답터 안드로이드 SDK에 기본으로 정의 되어있는 android.R.layout.sample_dropdown_item_1line 을 사용한다. 

 

사용자 정의 아답터( Custom Adapter )는 사용 가능한지 아직 테스를 안해보아서, 이는 확인이 안되었다.

 

그리고 마지막 매개변수 'list' 를 넘겨준다. 이때 'list'는  List<> 형식의 데이터든 Array배열의 데이터든 상과없이 사용이 가능하다.