본문 바로가기
안드로이드/ActionBar

안드로이드 ActionView

by 김어찐 2022. 6. 19.
728x90

ActionBar에 Viwe를 배치하고 이를 접었다 폈다 할 수 있는 개념이다.
주로 검색 기능을 만들 때 사용한다.

 

package com.example.actionviewe

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.ArrayAdapter
import androidx.appcompat.widget.SearchView
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main.view.*


class MainActivity : AppCompatActivity() {

    val data1 = arrayOf("aaaa","bbbb","cccc", "aabb","ccdd")

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

        val adapter = ArrayAdapter(this,android.R.layout.simple_list_item_1,data1)
        list1.adapter = adapter

        // 검색어 기준으로 필터링 될 수 있도록 설정한다.
        list1.isTextFilterEnabled = true
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.main_menu,menu)

        //SearchView를 가지고 있는 메뉴 아이템 객체를 추출
        val item1 = menu?.findItem(R.id.item1)
        // SearchView 객체를 가지고 온다.
        val search1 = item1?.actionView as SearchView
        // 안내문구를 설정
        search1.queryHint = "검색어 입력"

        // 메뉴 아이템에 배치된 뷰가 접히거나 펼쳐질 때 반응하는 리스너
        val listener1 = object : MenuItem.OnActionExpandListener {
            // 접혔을 떄 호출
            override fun onMenuItemActionCollapse(p0: MenuItem?): Boolean {
                textView.text="접힘"
                return true
            }

            // 펼쳐졌을 떄 호출
            override fun onMenuItemActionExpand(p0: MenuItem?): Boolean {
                textView.text="펼침"
                return true
            }
        }
        item1.setOnActionExpandListener(listener1)

        // SearchView의 리스너
        val listener2 = object : SearchView.OnQueryTextListener{
            // 키보드의 돋보기 버튼을 눌렀을 때 호출되는 메서드
            override fun onQueryTextSubmit(query: String?): Boolean {
                textView.text = "문자열 입력 완료"
                textView2.text = "입력 완료 : $query"
                // 키보드 활성화 끄기
                search1.clearFocus()
                return true
            }

            // SearchView에 문자열을 입력할 떄 마다 호출되는 메서드
            override fun onQueryTextChange(newText: String?): Boolean {
                textView.text = "문자열 입력중"
                textView2.text = "입력 중 : $newText"

                // SearchView에 입력한 내용을 listView의 필터 문자열로 설정한다.
                list1.setFilterText(newText)

                // 만약 설정한 문자열의 길이가 0 이라면 필터 문자열을 제거한다.
                if (newText?.length == 0) {
                    list1.clearTextFilter()
                }
                return true

            }
        }
        search1.setOnQueryTextListener(listener2)

        return true
    }
}

 

 

 

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/item1"
        android:icon="@android:drawable/ic_menu_search"
        android:title="SearchBar"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView"/>
</menu>
728x90