SearchView는 검색창을 구현할 때 사용한다.
보통 사용 유형은 Toolbar와 함께 사용하거나, SearchView를 따로 사용하는 유형이 있다.
1. SearchView
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:inputType="text"
app:iconifiedByDefault="false"
app:queryHint="쿼리 힌트"/>
- iconifiedByDefault
- true : 아이콘 상태 >> 클릭 시 입력창 표시
- false : 항상 입력창 표시
binding.searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
// TODO Enter 입력 시 호출되는 함수
binding.searchView.clearFocus() // 검색 완료 시 포커스 제거
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
//TODO 검색창 내용 변경 시 매번 호출되는 함수
return false
}
})
// 검색 완료 후 키보드 숨기기
binding.searchView.setOnQueryTextFocusChangeListener { view, hasFocus ->
if(hasFocus){
val inputMethodManager = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY)
}
}
2. Toolbar SearchView
1. Toolbar View를 사용할 예정으로 AndroidManifest.xml에서 NoActionBar로 변경
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
2. toolbar_searchview.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/searchView"
android:title="@string/searchView"
android:icon="?attr/actionModeWebSearchDrawable"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom"/>
</menu>
두번째로 menu에서 위와 같이 생성
3. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
</LinearLayout>
4. MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.toolbar_searchview, menu)
val mSearch = menu!!.findItem(R.id.searchView)
val sv: SearchView = mSearch.actionView as SearchView
// 설정
sv.setIconifiedByDefault(false)
sv.queryHint = "검색하세요.."
sv.maxWidth = Int.MAX_VALUE
sv.isFocusable = true
sv.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
return false
}
})
return super.onCreateOptionsMenu(menu)
}
}
'안드로이드 > XML' 카테고리의 다른 글
TimePicker (1) | 2024.07.14 |
---|---|
[Layout] CoordinatorLayout (0) | 2024.07.13 |
[안드로이드] RecyclerView Click Event (0) | 2023.11.30 |
[안드로이드] RecyclerView 리사이클러뷰 개념 및 사용법 (0) | 2023.11.03 |