Zalecamy użycie metody
SearchView
jako element na pasku aplikacji, który udostępnia funkcję wyszukiwania w aplikacji. Jako
mając wszystkie elementy na pasku aplikacji, możesz określić wymiar SearchView
, by
wyświetlane przez cały czas lub tylko wtedy, gdy jest wystarczająco dużo miejsca. Możesz też zdefiniować go jako
działanie zwijane, w którym SearchView
jest ikoną
a potem zajmuje cały pasek aplikacji jako pole wyszukiwania,
kliknij ją.
Dodaj SearchView do paska aplikacji
Aby dodać widżet SearchView
do paska aplikacji, utwórz plik w
projekt o nazwie res/menu/options_menu.xml
i dodaj ten kod
do pliku. Ten kod określa sposób tworzenia elementu wyszukiwania, np. ikony
oraz tytuł produktu. Atrybut collapseActionView
SearchView
może rozwinąć się i zająć cały pasek aplikacji,
zwinięty z powrotem do normalnego elementu na pasku aplikacji, gdy nie jest używany. Z powodu
na pasku aplikacji jest ograniczone miejsce, zalecamy korzystanie z
Atrybut collapsibleActionView
, aby zapewnić użytkownikom lepsze wrażenia
i uzyskiwanie dodatkowych informacji.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/ic_search" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="androidx.appcompat.widget.SearchView" /> </menu>
Jeśli chcesz, aby ikona wyszukiwania była łatwiejsza w obsłudze, utwórz
ic_search.xml
plik w folderze /res/drawable
i
umieść w nim ten kod:
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> </vector>
Aby wyświetlić SearchView
na pasku aplikacji, rozszerz menu XML
zasób res/menu/options_menu.xml
w
onCreateOptionsMenu()
metoda Twojej aktywności:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) return true }
Po uruchomieniu aplikacji wygląda to mniej więcej tak:
![Obraz pokazujący pusty ekran z ikoną wyszukiwania na górnym pasku aplikacji](https://developer.android.com/static/images/ui/searchview_1.png?authuser=9&hl=pl)
Ikona SearchView
jest widoczna na pasku aplikacji, ale wcale nie jest
i funkcjonalność. Po kliknięciu ikony wyszukiwania pojawi się komunikat podobny do tego:
![Ilustracja pokazująca działanie widoku wyszukiwania](https://developer.android.com/static/images/ui/searchview_2.png?authuser=9&hl=pl)
SearchView
w akcji.
Aby interfejs SearchView
działał poprawnie, musisz określić, jak
Zachowuje się SearchView
.
Tworzenie konfiguracji wyszukiwania
Wyszukiwanie
określa działanie parametru SearchView
i
zdefiniowane w pliku res/xml/searchable.xml
. Konfiguracja wyszukiwania
musi zawierać co najmniej atrybut android:label
z atrybutem
tej samej wartości co atrybut android:label
atrybutu
<aplikacja>
lub <activity>
w pliku manifestu Androida. Zalecamy jednak dodanie atrybutu
Atrybut android:hint
, który informuje użytkownika, co wpisać
w polu wyszukiwania.
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint" />
W pliku manifestu aplikacji zadeklaruj parametr
<meta-data>
wskazujący plik res/xml/searchable.xml
. Zadeklaruj parametr
w elemencie <activity>
, w którym chcesz wyświetlać
SearchView
<activity android:name=".SearchResultsActivity" android:exported="false" android:label="@string/title_activity_search_results" android:launchMode="singleTop" android:theme="@style/Theme.AppCompat.Light"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity>
W utworzonej przez siebie metodzie onCreateOptionsMenu()
powiąż
konfiguracji wyszukiwania za pomocą funkcji SearchView
przez wywołanie
setSearchableInfo(SearchableInfo)
:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager val searchView = menu.findItem(R.id.search).actionView as SearchView val component = ComponentName(this, SearchResultsActivity::class.java) val searchableInfo = searchManager.getSearchableInfo(component) searchView.setSearchableInfo(searchableInfo) return true }
Wezwanie do działania
getSearchableInfo()
uzyskuje
SearchableInfo
utworzony na podstawie pliku XML konfiguracji wyszukiwania. Gdy wyszukiwanie
jest prawidłowo powiązana z SearchView
i
użytkownik przesyła zapytanie, SearchView
rozpoczyna działanie z tagiem
ACTION_SEARCH
intencji. Potrzebujesz działania, które może filtrować tę intencję i obsługiwać
wyszukiwanego hasła.
Tworzenie aktywności, którą można przeszukiwać
Filtry aktywności dostępne do przeszukiwania dla intencji ACTION_SEARCH
i
wyszukanie hasła w zbiorze danych. Aby utworzyć aktywność do przeszukiwania, zadeklaruj
aktywność, którą chcesz przefiltrować w celu wyświetlenia danych z kategorii ACTION_SEARCH
intencja:
<activity android:name=".SearchResultsActivity" ... > ... <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> ... </activity>
W aktywności możliwej do wyszukiwania obsługuje intencję ACTION_SEARCH
przez
sprawdzając to na
onCreate()
.
Kotlin
class SearchResultsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_search_results) handleIntent(intent) } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) handleIntent(intent) } private fun handleIntent(intent: Intent) { if (Intent.ACTION_SEARCH == intent.action) { val query = intent.getStringExtra(SearchManager.QUERY) Log.d("SEARCH", "Search query was: $query") } } }
Teraz SearchView
może zaakceptować zapytanie użytkownika i uruchomić Twoją
aktywność, którą można przeszukiwać z intencją ACTION_SEARCH
.
Po otrzymaniu wyszukiwanego hasła możesz przesłać je do
ViewModel
, gdzie można go używać w innych warstwach
do pobierania wyników wyszukiwania do wyświetlenia.