[안드로이드 프로그래밍] ActionBar

PUJIN·2023년 6월 28일
0

android programming

목록 보기
15/26
post-thumbnail

ActionView


ActionBar에 view를 배치하고 접었다 펼쳤다 할 수 있는 개념

  • 주로 검색 기능 구현



검색 기능


1. 검색 menu item 설정

  1. res > menu > menu.xml 생성
  2. menu item 배치
  3. title 및 아이콘 설정 (선택)
  4. showAsAction : collapseActionView & always으로 설정
    • collapseActionView : 접었다 펼쳤다 할 수 있도록 설정
    • always : 항상 action bar에 노출
app:showAsAction="always|collapseActionView"
  1. ActionViewClass : androidx.appcompat.widget.SearchView으로 설정
app:actionViewClass="androidx.appcompat.widget.SearchView"

2. option menu 생성

override fun onCreateOptionsMenu(menu: Menu?): Boolean {

	menuInflater.inflate(R.menu.main_menu,menu)
    
    return super.onCreateOptionsMenu(menu)
}   

3. SearchView 설정

  1. SearchView-MenuItem 가져오기
val itemSearch = menu?.findItem(R.id.item1)
  1. SearchView 추출
val searchView = itemSearch?.actionView as SearchView
  1. 안내 문구(hint) 설정 (선택)
searchView.queryHint = "검색어 입력"

4. setOnActionExpandListener

ActionView가 펼쳐지거나 접혔을 때 동작하는 listener

  • onMenuItemActionExpand(p0: MenuItem) : 펼쳐졌을 때 동작하는 함수
    • false : 펼쳐지지 않는다.
    • true : 펼쳐진다.
  • onMenuItemActionCollapse(p0: MenuItem) : 접혔을 때 동작하는 함수
    • false : 접혀지지 않는다.
    • true : 접혀진다.
itemSearch.setOnActionExpandListener(object : MenuItem.OnActionExpandListener{
 
	override fun onMenuItemActionExpand(p0: MenuItem): Boolean {
		return true
	}

	override fun onMenuItemActionCollapse(p0: MenuItem): Boolean {
		return true
	}
})

5. setOnQueryTextListener

  • onQueryTextSubmit(query: String?) : 문자열 입력 완료한 후 엔터키를 누른 경우 동작
    • query : 입력한 문자열
  • onQueryTextChange(newText: String?) : 문자열 입력 중 동작
    • newText : 입력 중인 문자열
  • collapseActionView : ActionView 접어주기
  • expandActionView : ActionView 펼쳐주기
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
           
	override fun onQueryTextSubmit(query: String?): Boolean {
		searchView.clearFocus()

		itemSearch.collapseActionView()

		return true
	}

	override fun onQueryTextChange(newText: String?): Boolean {
		return true
	}

6. listView 설정

  1. listView 항목을 구성할 array 생성
val data1 = arrayOf(
	"데이터1", "데이터2", "데이터3", "data1", "data2"
)
  1. listView adapter 설정
activityMainBinding.run{
	list.run{
		adapter = ArrayAdapter<String>(
                    this@MainActivity, android.R.layout.simple_list_item_1, data1
		)
	}
}
  1. listView 검색 가능하도록 설정
isTextFilterEnabled = true
  1. listView에 filter 설정하여 검색어에 해당하는 항목만 보여주도록 설정
activityMainBinding.list1.setFilterText(newText)
  1. 검색어를 지운 경우 listView filter 초기화
if(newText?.length == 0){
	activityMainBinding.list1.clearTextFilter()
}
  1. filter 설정 후 listView 항목 1개를 클릭한 경우 해당 값 가져오도록 설정
  • setOnItemClickListener : listView 항목을 클릭한 경우 작동하는 listener
    • 순서값(i)으로 리스트에서 추출할 경우 필터 적용되었을 때 현재 보여지고 있는 항목에서 몇번째인지 추출 → 전체에서의 순번 X
list.setOnItemClickListener { adapterView, view, i, l ->

	val str = adapterView.adapter.getItem(i) as String
	val idx = data1.indexOf(str)
	activityMainBinding.textView.text = data1[idx]
}



ActionBar Navigation


  • 뒤로가기 기능 구현



뒤로가기 기능


1. Homebutton 활성화

supportActionBar?.setHomeButtonEnabled(true)

2. HomeButton 노출

supportActionBar?.setDisplayHomeAsUpEnabled(true)

3. 아이콘 변경 (선택)

  • 대부분 바꾸지 않고 사용
supportActionBar?.setHomeAsUpIndicator(R.mipmap.ic_launcher)

3. back button 클릭시 뒤로가기 구현

override fun onOptionsItemSelected(item: MenuItem): Boolean {

	when(item.itemId) {

		android.R.id.home -> {
          finish()
		}
	}
	return super.onOptionsItemSelected(item)
}

0개의 댓글