본문 바로가기
안드로이드 자바

[JAVA][Android] 텍스트 자동 완성 기능을 만들어보자

by teamnova 2021. 5. 3.

안녕하세요 ~

 

오늘은 안드로이드에서 텍스트를 자동으로 완성하는 기능을 구현해 보겠습니다.

 

네이버 자동 완성 기능

 

위 사진처럼 인터넷을 사용하시다 보면 검색한 단어가 자동으로 완성되는 것을 보셨을 텐데요. 

 

해당 기능은 안드로이드의 autoCompleteTextView 를 사용하여 쉽게 구현해 볼 수 있습니다.

 

그럼 한번 만들어 볼까요?

 

 

- 스틱코드

stickode.com/mainlogin.html

 

STICKODE

 

stickode.com


 

레이아웃 그리기

첫 번째로 검색창을 보여줄 레이아웃을 만들어 보겠습니다.

 

 

검색창

 

▶ activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.100000024">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="@color/teal_200"
            android:gravity="left|center_vertical"
            android:paddingLeft="5dp"
            android:text="StickCode"
            android:padding="5dp"
            android:textColor="#ffffff"
            android:textSize="20dp" />

        <AutoCompleteTextView
            android:id="@+id/autoCompleteTextView"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:hint="검색어를 입력해주세요."
            android:completionThreshold="1"
            android:gravity="center_vertical"
            android:textColorHint="#555555" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

위 코드는 레이아웃에 사용된 전체 소스 코드입니다.

 

 


 

 

자동완성 기능 구현

 

MainActivity.java

 

우선 자동 완성될 단어를 담는 리스트와 검색창을 담당할 autoCompleteTextView를 선언해 줍니다.

 

 

 

자동완성 단어를 리스트에 세팅해주는 메소드

 

여러 단어 뭉치를 리스트에 넣어줍니다. 저는 주식에 관한 단어들을 넣어줬습니다.

 

이제 스틱 코드를 이용해서 자동완성 단어가 세팅된 리스트를 어댑터와 연결시켜주겠습니다.

 

 

 

autoCompleteTextView Adapter Setting

스틱 코드로 불러온 소스에서 주석에 맞게 해당 객체들을 넣어줍니다. 

 

아래는 전체 소스 코드입니다

 

 

▶ MainActivity.java

package com.example.autocompletetextview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

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

public class MainActivity extends AppCompatActivity {

    // 자동완성 단어들을 담을 리스트
    List<String> searchList;

    // 자동완성 텍스트 뷰
    AutoCompleteTextView autoCompleteTextView;

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

        searchList = new ArrayList<>();

        // 자동완성 단어 리스트에 세팅
        settingList();

        autoCompleteTextView = findViewById(R.id.autoCompleteTextView);

        // autoCompleteTextView 에 어댑터 연결
        // "autoCompleteTextView" - autoCompleteTextView 객체
        // "ArrayList" - 리스트 객체
        autoCompleteTextView.setAdapter(new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item, searchList));

    }

    // 장동완성 단어 세팅
    private void settingList(){

        searchList.add("삼성전자");
        searchList.add("카카오");
        searchList.add("한화투자증권");
        searchList.add("NE능률");
        searchList.add("HMM");
        searchList.add("삼성출판사");
        searchList.add("덕성");
        searchList.add("휴마시스");
        searchList.add("LG전자");
        searchList.add("셀트리온");
        searchList.add("LG디스플레이");
        searchList.add("네이버");
        searchList.add("우리기술투자");
        searchList.add("삼성전자우");
        searchList.add("SK바이오사이언스");
        searchList.add("기아");
        searchList.add("LG유플러스");
        searchList.add("삼성SDI");
        searchList.add("자이언트스텝");
        searchList.add("에이치엘비");
        searchList.add("빅히트");
        searchList.add("삼성중공업");
    }
}

 

이제 모든 준비가 끝났습니다. 제대로 동작하는지 테스트해보도록 하겠습니다.

 

 

 

테스트

 

테스트

 

네 저상적으로 잘 동작하는 것을 확인할 수 있었습니다 ^____^