SearchView
และแถบการดำเนินการใช้ได้เฉพาะใน Android 3.0 และ
ในภายหลัง หากต้องการรองรับแพลตฟอร์มเก่า ให้กลับไปที่กล่องโต้ตอบการค้นหา กล่องโต้ตอบการค้นหาคือ
ซึ่งระบบได้ให้ UI ซึ่งวางซ้อนบนแอปพลิเคชันเมื่อเรียกใช้
กำหนดระดับ API ต่ำสุดและระดับเป้าหมาย
หากต้องการตั้งค่ากล่องโต้ตอบการค้นหา ให้ประกาศในไฟล์ Manifest ก่อนว่าคุณต้องการรองรับไฟล์เวอร์ชันเก่า อุปกรณ์ แต่ต้องการกำหนดเป้าหมายเป็น 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; } }
ตรวจสอบเวอร์ชันบิลด์ของ Android ในรันไทม์
ขณะรันไทม์ ให้ตรวจสอบเวอร์ชันของอุปกรณ์เพื่อให้แน่ใจว่าจะไม่มีการใช้ SearchView
ที่ไม่รองรับในอุปกรณ์รุ่นเก่า ในโค้ดตัวอย่างของเรา จะเกิดขึ้นใน
เมธอด 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; }