הסמל SearchView
וסרגל הפעולות זמינים רק ב-Android מגרסה 3.0 ואילך. כדי לתמוך בפלטפורמות ישנות יותר, אפשר להשתמש בתיבת הדו-שיח של החיפוש. תיבת הדו-שיח של החיפוש היא ממשק משתמש שמסופק על ידי המערכת, שמופיע בשכבה מעל האפליקציה כשמפעילים אותו.
הגדרת רמות API מינימלית ויעדים
כדי להגדיר את תיבת הדו-שיח של החיפוש, קודם צריך להצהיר במניפסט שאתם רוצים לתמוך במכשירים ישנים יותר, אבל לטרגט גרסאות Android 3.0 ואילך. כשעושים זאת, האפליקציה משתמשת באופן אוטומטי בסרגל הפעולות ב-Android מגרסה 3.0 ואילך, ובמערכת התפריטים המסורתית במכשירים ישנים יותר:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
הצגת תיבת הדו-שיח של החיפוש במכשירים ישנים יותר
כדי להפעיל את תיבת הדו-שיח של החיפוש במכשירים ישנים יותר, צריך להפעיל את onSearchRequested()
בכל פעם שמשתמש בוחר באפשרות 'חיפוש' בתפריט האפשרויות. מאחר שבמכשירים עם Android מגרסה 3.0 ואילך מופיע הסמל SearchView
בסרגל הפעולות (כפי שמוצג בשיעור הראשון), רק בגרסאות ישנות יותר מ-3.0 מתבצעת קריאה ל-onOptionsItemSelected()
כשהמשתמש בוחר באפשרות בתפריט החיפוש.
Kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.search -> { onSearchRequested() true } else -> false } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search: onSearchRequested(); return true; default: return false; } }
בדיקת גרסת ה-build של Android בזמן ריצה
בזמן הריצה, בודקים את גרסת המכשיר כדי לוודא שלא מתבצע שימוש לא נתמך ב-SearchView
במכשירים ישנים יותר. בקוד לדוגמה, זה קורה ב-method onCreateOptionsMenu()
:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager (menu.findItem(R.id.search).actionView as SearchView).apply { setSearchableInfo(searchManager.getSearchableInfo(componentName)) setIconifiedByDefault(false) } } return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); } return true; }