[Android] SearchView 사용기
이번에는 저번 프로젝트에서 사용했던 View에 대해서 또 다른 것을 정리를 해보려고한다.
바로 SearchView이다. 우리가 원하는 콘텐트 혹은 스트링을 찾기 위해서 사용하는 SearchView이다. 이를 실제로 Android에서 어떤식으로 사용하였는지 그리고 어떻게 사용할 것인지에 대해서 또 공부해보자.
SearchView란
SearchView는 안드로이드 애플리케이션에서 검색 인터페이스를 제공하는 위젯이다. 이는 사용자가 텍스트를 입력하여 데이터를 검색할 수 있게 해주는 기능을 제공하며, 주로 툴바나 액션바에 통합되어 사용된다. SearchView는 사용자의 입력을 받아 검색 쿼리를 처리하고 결과를 제공하는 역할을 한다.
SearchView 사용기
XML
<androidx.appcompat.widget.SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:iconifiedByDefault="false"
app:layout_constraintStart_toEndOf="@+id/textView"
app:queryHint="@string/searchHint" />
app:iconifiedByDefault="false"
- SearchView가 기본적으로 축소된 상태로 표시될지 여부를 설정한다. false로 설정하면 SearchView는 기본적으로 확장된 상태로 표시된다.
app:queryHint="@string/searchHint"
- 검색 입력란에 표시될 힌트 텍스트를 설정한다. @string/searchHint는 문자열 리소스 파일에서 정의된 힌트를 참조한다.
Activity
private fun initSearchView() {
binding.searchView.setQuery(frontQuery, false)
binding.searchView.isSubmitButtonEnabled = true
binding.searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
if (query != null) {
if (viewModel.uiState.value.searchToMap) {
val company = emptyList<CompanyEntity>()
viewModel.updateMapToSearch()
replaceMapFragment(company)
hideKeyboard()
} else {
replaceSearchFragment(query)
viewModel.updateSearchToMap()
frontQuery = query
}
}
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
return false
}
})
}
binding.searchView.setQuery(frontQuery, false):
SearchView에 기존 검색 쿼리 (frontQuery)를 설정한다. 두 번째 매개변수 false는 설정 후 검색을 실행하지 않도록 한다.
binding.searchView.isSubmitButtonEnabled = true:
SearchView의 제출 버튼을 활성화한다. 이를 통해 사용자가 검색 버튼을 눌러 검색을 제출할 수 있다.
binding.searchView.setOnQueryTextListener:
SearchView에 OnQueryTextListener를 설정하여 검색 쿼리 제출 및 변경 이벤트를 처리한다.
onQueryTextSubmit(query: String?):
사용자가 검색 쿼리를 제출했을 때 호출된다.
onQueryTextChange(newText: String?):
검색 텍스트가 변경될 때 호출된다. 현재 구현에서는 아무 동작도 하지 않고 false를 반환합니다.
만약 onQueryTextChange를 True로 놓고 비동기처리로 UI의 반응형 로직으로 처리한다면 사용자가 텍스트를 입력할 때마다 관련 검색어를 실시간으로 보여줄 수 있다.
아쉬웠던 점
조금만 더 공부했더라면 SearchView에서도 반응형 UI를 구현할 수 있었을텐데 그러질 못했다.