[안드로이드 기초] 텍스트 자동완성 (AutoCompleteTextView)
▣ 안드로이드 기초 텍스트 자동완성 |
■ AutoCompleteTextView는 EditText에 키워드 기능을 추가한 객체로 이해하면 될텐데요. 흔이 우리가 검색 사이트에서 어떤 단어를 검색하고자 첫글자를 입력하면 그에 관련된 인기도 높은 단어들이 자동완성 되어 출력되는걸 보셨을 겁니다. 안드로이드에서 이런 기능을 제공하는 텍스트뷰로 이해하면 됩니다.
MultiAutoCompleteTextView는 이런 기능에 구분자(,)를 사용하여 여러개의 데이터를 선택할 수 있는 기능입니다.
예제 프로젝트를 만들어가면서 이해를 해보겠습니다.
■ 지역을 입력하기 위해서 한글자를 입력하면 그 문자열로 시작하는 데이터가 출력이 되면서 선택을 할 수 있게 되고, 이름 입력란에 한글자를 입력하면 마찬가지로 그 문자열로 시작하는 연락처의 데이터가 출력이되서 선택할 수 있고, (,)가 생기면서 추가로 이름을 입력받을 준비를 하게 됩니다.
■ 실행을 해서 이런 기능을 구현하기 위해서 몇가지 파일을 만들도록 하겠습니다. 이름 입력란은 전화번호부에서 데이터를 가져올거구요. 지역은 키워드를 제공해서 매핑하도록 하겠습니다(arrays.xml). 그리고 해당 데이터가 뜨면서 아래쪾에 안내문을 출력하도록 하겠습니다. (string.xml)
■ 파일을 하나씩 준비하겠습니다. 먼저 activity_main.xml 파일은 다음과 같습니다.
두개의 자동완성 객체를 배치하고, AutoCompleteTextView 입력란에 커서를 위치하도록 하고 있습니다.
■ 키워드를 제공해줄 arrays.xml파일을 작성하겠습니다.
■ 다음으로 키워드 목록에 출력할 "안내문"을 string.xml파일에 작성합니다.
■ 이 프로젝트에서는 연락처에 접근해서 데이터를 가져와야 하기 때문에 매니페스트에서 다음과 같은 permission 설정을 해줘야 합니다. 연락처 정보를 읽을 수 있는 권한과 수정, 삭제, 등록할 수 있는 두가지 권한을 설정한 것입니다.
■ 액티비티 파일에서 두 입력란에 키워드 목록을 매핑하도록 하겠습니다.
① arrays.xml 에서 정의한 키워드를 String[]형으로 변환해서 안드로이드 기본 목록 레이아웃에 매핑해서 Array Adapter<String>만들어서 첫번째 입력란에 매핑하고 있습니다.
② 두번째 입력란에는 키워드로 연락처 데이터를 매핑하고 있는데요. (ContentResolver)콘텐트 연결자를 호출해서 query90 메서드를 이용해서 커서(Cursor)형으로 연결하고, 커서를 매개변수로 하는 "ContactListAdapter"클래스를 생성해서 멀티자동완성 텍스트뷰를 호출해서 설정하고 있습니다. 마지막으로 구분자(,) (Tokenizer)를 설정해주고 있습니다.
ContentResolver로 연락처 정보를 물어볼때 사용할 선택항목을 String[]형으로 정의하고, 사용할 키워드 항목은" DISPLAY_NAME"입니다. 위에서 멀티자동완성에 사용할 키워드를 매핑할때 호출했던 ContactListAdapter클래스를 작성하고, 생성자에서 ContentResolver와 Cursor를 전달받고 있습니다.
① 목록에 한 행을 생성하여 실행하는 메서드인데요. 행 레이아웃을 목록에 매핑하는 기능을 있는 LayoutInflater클래스를 호출하고, 기본으로 제공하는 드롭다운형 레이아웃을 사용하고 있습니다. 여기서 cursor에서 두번째 항목인" DISPLAY_NAME"필드는 배열번호가 1이므로 cursor.getString(1)은 연락처 이름을 의미합니다.
② 이미 만들어져 있는 행에 데이터만 교체할 때 실행하는 메서드와 해당 커서 데이터에서 추출할 값을 문자열로 변환하는 메서드입니다.
③ if문을 이용해서 질의 공급자가 있을 경우 검색을 실행하고, 그렇지 않는 아래쪽 구문을 실행하도록 하고 있으며," DISPLAY_NAME" 필드를 기준으로 연락처 이름을 검색하고 있습니다.