자동 완성 텍스트 뷰 / Adaptor View 어뎁터 뷰 / 특징 정리 / setAdator / completionhint /thredshold / token

2022. 3. 21. 20:48Kotlin

자동완성 텍스트 뷰
<Auto complete Text View>

 

 

자동완성 텍스트뷰는 "ㅇㅇ"만 쳐도 ㅇㅇ과 관련된 검색어가 좌르르륵 나오는 것처럼

관련 데이터들을 목록화해주는 안드로이드 위젯이다.

교제에 나와있던 쉬운 자동완성 텍스트뷰의 결과물 사진이다,

자동완성 텍스트뷰를 사용하기 위해서는 크게 2가지 스텝이 필요하다.

 

1. 어뎁터뷰(Adaptor View)를 xml에 작성하고 kotlin코드에 바인딩한다.

2. kotlin 코드에서 어뎁터뷰(Adaptor View)를 어뎁터(Adaptor)와 setAdaptor로 연결한다.

 

 

 

1단계다. 여기 2가지 자동완성 디자인을 넣은 간단한 xml 코드

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <AutoCompleteTextView
        android:id="@+id/autoCompleteTextView1"
        android:completionHint="선택하세요"
        android:completionThreshold="2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="자동완성텍스트뷰">
    </AutoCompleteTextView>

    <MultiAutoCompleteTextView
        android:id="@+id/multiAutoCompleteTextView1"
        android:completionHint="선택하세요."
        android:completionThreshold="2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="멀티자동완성텍스트뷰"/>

여기서 

 

1. completionHint 는 촤르륵 펼쳐진 리스트 하단에 들어갈 문구를 말한다. 

2. completionThreshold= " " 은 " "안에 들어갈 숫자만큼만 관련된 단어들이 촤르륵 나온다.

예를들어 completionThreshold= "2"이고  "수지"를 검색하면 수지로 시작하는 단어들이 촤르륵 나온다는 말

(단, 데이터 내에서)

 

 

 

 

2단계다.  kotlin 코드에서 어뎁터뷰(Adaptor View)를 어뎁터(Adaptor)와 setAdaptor로 연결한다.

 

package com.example.ex6_autocomlete

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.AutoCompleteTextView
import android.widget.MultiAutoCompleteTextView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var items=arrayOf("CSI-뉴욕", "CSI-라스베가스", "CSI-마이애미", "Frends", "Fringe", "Lost")

        var auto=findViewById<AutoCompleteTextView>(R.id.autoCompleteTextView1)
        //어뎁터뷰 개체화
        var adapter=ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line, items)
        auto.setAdapter(adapter)
        //어뎁터(context: 위치, 디자인-안드로이드 양식을 그대로 쓰겠다, 데이터)
        //어뎁터뷰(auto)와 어뎁터(adapter)를 연결하는 setAdapter 메소드

        var multi=findViewById<MultiAutoCompleteTextView>(
            R.id.multiAutoCompleteTextView1)

        var token=MultiAutoCompleteTextView.CommaTokenizer()
        //token: 구분자 -> 쉼표 찍고, 다음 데이터에도 접근
        multi.setTokenizer(token)
        multi.setAdapter(adapter)

구체적으로 kotlin 코드를 보면 

var auto=findViewById<AutoCompleteTextView>(R.id.autoCompleteTextView1)

어뎁터 뷰의 개체화를 진행하고

var adapter=ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line, items)

 

어뎁터를 만들고

auto.setAdapter(adapter)

어뎁터를 어뎁터 뷰에 꽂는다.

var token=MultiAutoCompleteTextView.CommaTokenizer()
multi.setTokenizer(token)

여러 데이터를 넣기 위해 (, 쉼표로 구분) Tozenizer 메소드를 사용한

다.