[Android] ActionView

1 분 소요

Intro

액션바에 적용하는 아이템들에게 showAsAction을 설정하여 액션바에 직접 보이도록 설정할 수 있다.

이번 시간에는 showAsAction 값을 collapseActionView로 설정함으로써 ActionView를 설정해보고자 한다.


사진

  • ActionView의 경우 위 사진과 같이 검색기능을 위해 많이 사용된다고 한다.

👩 따라서 이번 시간에는 검색기능을 한 번 구현해보고자 한다.


🙋‍♀️showAsAction = “collapseActionView”

# main_menu.xml

    <item
        android:id="@+id/item1"
        android:icon="@drawable/calendar_b_month"
        android:title="메뉴1"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView" />

  • 값을 설정하다보면 android 위젯에서 제공하는 것과 androidx에서 제공하는 것이 있다.
    • androidx를 선택해야 하위버전에도 잘 적용이 된다.
    • androidx를 선택했을 때, 잘 작동이 안된다면 그때 android에서 제공하는 것을 선택하자.

🙋‍♀️searchView의 펼쳐진 여부에 따른 리스너 설정

🙋‍♀️searchView 객체 가져오기

#MainActivity.kt

    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 = "검색어 입력"

      return true
    }

🙋‍♀️리스너 객체 생성

# MainActivity.kt
# 위 코드 안에 작성

        val listener1 = object: MenuItem.OnActionExpandListener{
            //접혔을 때 호출

            override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
             ...   
            }

            //펼쳐졌을 때 호출
            override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
              ...
            }
        }

  • 반환되는 값은 크게 상관이 없다.
  • searchView를 가지고 있는 메뉴 아이템이 각 함수에 item에 해당된다.

🙋‍♀️item에 리스너 적용

#MainActivity.kt
#위 코드와 이어짐

item1.setOnActionExpandListener(listener1)

🙋‍♀️SearchView에 대한 리스너

  • 값이 입력될 때마다 호출되는 함수와 검색이 완료된 후 호출되는 함수가 존재한다.
# onCreateOptionsMenu 안에 작성

val listener2 = object: SearchView.OnQueryTextListener{
            //searchView에 값이 입력될 때마다 호출되는 함수
            override fun onQueryTextChange(newText: String?): Boolean {
                textView1.text = "입력 중"
                textView2.text = "입력: $newText"

                return true
            }
            //키보드의 돋보기 버튼을 눌렀을 때 호출되는 함수
            //즉, 입력이 완료되었을 때 호출되는 함수
            override fun onQueryTextSubmit(query: String?): Boolean {
                textView1.text = "문자열 입력 완료"
                textView2.text = "입력 완료: $query"

                //입력완료 후, 키보드가 사라지게 함
                search1.clearFocus()
                return true
            }
        }

        // 리스너 적용
        search1.setOnQueryTextListener(listener2)
        
        return true
}


📃참고

  • 인프런 윤재성의 Kotlin 기반 안드로이드 앱 개발 Part3 수강

댓글남기기