Android 8.0 เพิ่มความสามารถในการค้นหาเพิ่มเติมสำหรับเมนู การตั้งค่า เอกสารนี้อธิบายวิธีการเพิ่มการตั้งค่าและตรวจสอบให้แน่ใจว่าได้รับการจัดทำดัชนีอย่างเหมาะสมสำหรับการค้นหาการตั้งค่า
การสร้างการตั้งค่าที่สามารถจัดทำดัชนีได้
ส่วนการตั้งค่าแต่ละรายการที่ต้องจัดทำดัชนีจะใช้อินเทอร์เฟซ Indexable
และต้องมีฟิลด์คงที่:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
เมื่อคุณตั้งค่าแฟรกเมนต์สำหรับการจัดทำดัชนีแล้ว ให้เพิ่มลงใน SearchIndexableResources
ที่:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
วิธีการทางเลือก
อินเทอร์เฟซ SearchIndexProvider
นี้มีเมธอดทางเลือกสี่วิธี
getXmlResourcesToIndex.getXmlResourcesToIndex
- แทนที่สิ่งนี้หากเนื้อหาแฟรกเมนต์ของคุณมาจาก:
preference xml
- ส่งกลับการกำหนดค่า XML เป็นรายการที่จะทำดัชนี
ตัวอย่างทรัพยากร XML:
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled) { ArrayList<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.display_settings; result.add(sir); return result; }
getRawDataToIndex.getRawDataToIndex
- แทนที่สิ่งนี้หากเนื้อหาแฟรกเมนต์ของคุณไม่ได้มาจาก:
preference xml
- ส่งคืนรายการข้อมูลดิบ (
SearchIndexableRaw
) ที่จะทำดัชนี
ตัวอย่างข้อมูลดิบ:
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final List<SearchIndexableRaw> result = new ArrayList<>(); final Resources res = context.getResources(); // Add fragment title SearchIndexableRaw data = new SearchIndexableRaw(context); data.title = res.getString(R.string.wifi_settings); data.screenTitle = res.getString(R.string.wifi_settings); data.keywords = res.getString(R.string.keywords_wifi); data.key = DATA_KEY_REFERENCE; result.add(data); return result; }
getNonIndexableKeys
- หากแฟรกเมนต์ของคุณคือ
DashboardFragment
คุณแทบจะไม่ต้องแทนที่สิ่งนี้เลย - ส่งคืนรายการคีย์ที่สอดคล้องกับผลลัพธ์ที่ไม่ควรแสดงสำหรับผู้ใช้ อุปกรณ์ การกำหนดค่า ฯลฯ ที่ระบุ คีย์ที่ให้ไว้ที่นี่ควรตรงกับฟิลด์ KEY ใน
SearchIndexableResource
และSearchIndexableRaw
- ตัวอย่างเช่น: การใช้ข้อมูลไม่ควรแสดงสำหรับผู้ใช้ที่ไม่เคยมีซิมการ์ดในอุปกรณ์ของตน
ตัวอย่างคีย์ที่ไม่สามารถจัดทำดัชนีได้:
public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!checkIntentAction(context, "android.settings.TERMS")) { keys.add(KEY_TERMS); } if (!checkIntentAction(context, "android.settings.LICENSE")) { keys.add(KEY_LICENSE); } if (!checkIntentAction(context, "android.settings.COPYRIGHT")) { keys.add(KEY_COPYRIGHT); } if (!checkIntentAction(context, "android.settings.WEBVIEW_LICENSE")) { keys.add(KEY_WEBVIEW_LICENSE); } return keys; }
getPreferenceControllers
ส่งคืนรายการตัวควบคุมการกำหนดค่าตามความชอบที่เกี่ยวข้องกับส่วนนี้ รายการนี้ใช้เพื่อสร้างผลลัพธ์แบบอินไลน์ อัปเดตรายการที่ไม่สามารถจัดทำดัชนีได้ ฯลฯ
ดังนั้น ทุกสิ่งที่คุณต้องการให้แสดงในการค้นหาจะต้องรวมอยู่ใน getXmlResourcesToIndex
หรือ getRawDataToIndex
การเพิ่มคำหลักสำหรับการตั้งค่าของคุณ
เพื่อให้แน่ใจว่าการตั้งค่าจะค้นหาได้ง่าย ให้เพิ่มคำหลักที่เกี่ยวข้องกับการตั้งค่าที่ผู้ใช้อาจใช้ค้นหาการตั้งค่า
สิ่งที่ต้องพิจารณาเมื่อเพิ่มคำหลัก:
- คำหลักคือรายการคำที่ผู้ใช้ไม่จำเป็นต้องเห็น แต่อาจเป็นส่วนหนึ่งของแบบจำลองทางจิตเกี่ยวกับวิธีการทำงานของการตั้งค่า
- คำเหล่านี้เป็นคำที่ผู้ใช้อาจพิมพ์เพื่อไปยังการตั้งค่าของคุณ
- อาจเป็นคำพ้องหรือคำใดๆ ที่เกี่ยวข้องกับการตั้งค่าก็ได้
- เช่น อาจใช้ "ปิดเสียง" เพื่อค้นหาการตั้งค่าระดับเสียง
หลีกเลี่ยงการทำซ้ำ
หากคุณระงับหน้าการตั้งค่าโดยไม่มีเงื่อนไข ให้ลบการจัดทำดัชนีของหน้าเดิมออกเพื่อหลีกเลี่ยงไม่ให้ผลลัพธ์ซ้ำกัน
- ค้นหา
PreferenceFragment
ของหน้าที่คุณกำลังระงับ - ลบ
SearchIndexProvider
การตรวจสอบ
หากต้องการทดสอบความสามารถในการค้นหาของการตั้งค่าใหม่:
- ติดตั้ง O เวอร์ชันล่าสุดบนอุปกรณ์
- สร้างดัชนีฐานข้อมูลใหม่โดยเลือก: การตั้งค่า > แอพและการแจ้งเตือน > ข้อมูลแอพ > การตั้งค่า > ที่เก็บข้อมูล > ล้างข้อมูล
- ตรวจสอบการตั้งค่าเป้าหมายที่ปรากฏในการค้นหา
การค้นหาคำนำหน้าชื่อการตั้งค่าจะตรงกัน
การทดสอบ robolectric เหล่านี้อาจดำเนินการเพื่อตรวจสอบการใช้งานคุณลักษณะนี้:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
เป้าหมายในการสร้างคือ: RunSettingsRoboTests