Please use:
- com.google.android.material.search.SearchBar
- com.google.android.material.search.SearchView
- Search component for Android
- Material You Design
- Styling
- Kotlin
- Java = 1.8
- Kotlin = 1.8
Add the dependency to your gradle file:
repositories {
google()
mavenCentral()
}
dependencies {
implementation 'io.github.lapism:search:2.0.1'
}
binding.materialSearchView.requestFocus()
binding.materialSearchView.clearFocus()
val toolbar = binding.materialSearchBar.getToolbar()
setSupportActionBar(toolbar)
binding.materialSearchBar.apply {
navigationIconCompat = NavigationIconCompat.SEARCH
setHint(getString(R.string.search))
setOnClickListener {
binding.materialSearchView.requestFocus()
}
setNavigationOnClickListener {
binding.materialSearchView.requestFocus()
}
}
binding.materialSearchView.apply {
addView(recyclerView)
navigationIconCompat = NavigationIconCompat.ARROW
setNavigationOnClickListener {
binding.materialSearchView.clearFocus()
}
setHint(getString(R.string.search))
setOnQueryTextListener(object : MaterialSearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: CharSequence) {
adapter.filter(newText)
}
override fun onQueryTextSubmit(query: CharSequence) {
}
})
setOnFocusChangeListener(object : MaterialSearchView.OnFocusChangeListener {
override fun onFocusChange(hasFocus: Boolean) {
}
})
}
You have to use app theme Theme.Material3.* or Theme.MaterialComponents.*.
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
tools:context=".activity.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Simple MaterialToolbar extension -->
<com.lapism.search.widget.MaterialSearchBar
android:id="@+id/material_search_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways|snap" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_behavior="@string/material_search_bar_scrolling_view_behavior"
app:navGraph="@navigation/mobile_navigation" />
<com.lapism.search.widget.MaterialSearchView
android:id="@+id/material_search_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_anchor="@id/material_search_bar" />
<BottomNavigationView
android:id="@+id/bottom_navigation_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical"
app:layout_insetEdge="bottom"
app:menu="@menu/menu_bottom_nav" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<declare-styleable name="MaterialSearchBar">
<attr name="search_navigationIconCompat" format="enum">
<enum name="none" value="0" />
<enum name="arrow" value="1" />
<enum name="search" value="2" />
</attr>
<attr name="search_navigationIcon" format="reference" />
<attr name="search_navigationContentDescription" format="reference" />
<attr name="search_navigationBackgroundColor" format="reference" />
<attr name="search_navigationElevation" format="dimension" />
<attr name="search_radius" format="dimension" />
<attr name="android:hint" />
<attr name="android:layout_marginStart" />
<attr name="android:layout_marginEnd" />
<attr name="android:layout_marginTop" />
<attr name="android:layout_marginBottom" />
</declare-styleable>
<declare-styleable name="MaterialSearchView">
<attr name="search_navigationIconCompat" />
<attr name="search_navigationIcon" />
<attr name="search_navigationContentDescription" />
<attr name="search_navigationBackgroundColor" />
<attr name="search_navigationElevation" />
<attr name="search_clearIcon" format="reference" />
<attr name="search_dividerColor" format="reference" />
<attr name="search_scrimColor" format="reference" />
<attr name="android:hint" />
<attr name="android:imeOptions" />
<attr name="android:inputType" />
</declare-styleable>
Animation
- animation like Google, needs help :)
- Martin Lapiš - GitHub
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.