Android 8.0 เพิ่มความสามารถในการค้นหาเพิ่มเติมให้กับเมนูการตั้งค่า เอกสารนี้จะอธิบายวิธีเพิ่มการตั้งค่าและตรวจสอบว่ามีการจัดทำดัชนีอย่างถูกต้องสำหรับการค้นหาการตั้งค่า
สร้างการตั้งค่าที่จัดทำดัชนีได้
ส่วนย่อยของการตั้งค่าแต่ละรายการที่ต้องจัดทำดัชนีจะใช้อินเทอร์เฟซ Indexable
และต้องใช้ช่องแบบคงที่ ดังนี้
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
หลังจากตั้งค่า Fragment สำหรับการจัดทำดัชนีแล้ว ให้เพิ่มส่วนนั้นลงใน SearchIndexableResources
ซึ่งพบได้ที่
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
วิธีการที่ไม่บังคับ
อินเทอร์เฟซ SearchIndexProvider
นี้มีวิธีการที่ไม่บังคับ 4 วิธี
getXmlResourcesToIndex
- โปรดลบล้างค่านี้หากเนื้อหา Fragment มาจาก
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; }
รับดัชนีข้อมูลข้อมูลดิบ
- โปรดลบล้างค่านี้หากเนื้อหา Fragment ไม่ได้มาจาก
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; }
getNonIndexableKey
- หากส่วนย่อยของคุณเป็น
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; }
getPreferenceController
แสดงรายการตัวควบคุมค่ากำหนดที่เชื่อมโยงกับส่วนย่อยนี้ รายการนี้ใช้เพื่อสร้างผลการค้นหาในบรรทัด อัปเดตรายการที่จัดทำดัชนีไม่ได้ ฯลฯ
ดังนั้น ทุกรายการที่คุณต้องการให้แสดงในการค้นหาต้องรวมอยู่ใน getXmlResourcesToIndex
หรือ getRawDataToIndex
เพิ่มคีย์เวิร์ดสำหรับการตั้งค่าของคุณ
หากต้องการให้ค้นหาการตั้งค่าได้ง่าย ให้เพิ่มคีย์เวิร์ดที่เกี่ยวข้องกับการตั้งค่าที่ผู้ใช้อาจใช้ค้นหาการตั้งค่าดังกล่าว
สิ่งที่ต้องพิจารณาเมื่อเพิ่มคีย์เวิร์ดมีดังนี้
- คีย์เวิร์ดคือรายการคำที่ผู้ใช้ไม่จำเป็นต้องเห็น แต่อาจเป็นส่วนหนึ่งของรูปแบบทางความคิดของผู้ใช้สำหรับวิธีการทำงานของการตั้งค่านี้
- คำเหล่านี้คือคำที่ผู้ใช้อาจพิมพ์เพื่อไปยังการตั้งค่าของคุณ
- โดยสามารถเป็นคำพ้องความหมายหรือคำใดก็ได้ที่เกี่ยวข้องกับการตั้งค่าดังกล่าว
- เช่น "ปิดเสียง" อาจใช้เพื่อค้นหาการตั้งค่าระดับเสียง
หลีกเลี่ยงการทำซ้ำ
หากคุณระงับหน้าการตั้งค่าอย่างไม่มีเงื่อนไข ให้นำการจัดทำดัชนีหน้าเดิมออกเพื่อหลีกเลี่ยงการแสดงผลลัพธ์ที่ซ้ำกัน
- ค้นหา
PreferenceFragment
ของหน้าเว็บที่คุณกำลังระงับ - นำ
SearchIndexProvider
ออก
การตรวจสอบความถูกต้อง
วิธีทดสอบความสามารถในการค้นหาของการตั้งค่าใหม่
- ติดตั้ง O เวอร์ชันล่าสุดในอุปกรณ์
- จัดทำดัชนีฐานข้อมูลอีกครั้งโดยเลือกตัวเลือกต่อไปนี้ การตั้งค่า > แอปและการแจ้งเตือน > ข้อมูลแอป > การตั้งค่า > พื้นที่เก็บข้อมูล > ล้างข้อมูล
- ตรวจสอบว่าการตั้งค่าเป้าหมายปรากฏในการค้นหา
การค้นหาคำนำหน้าของชื่อการตั้งค่าจะตรงกับค่าดังกล่าว
เราอาจทำการทดสอบแบบ Robolectric เหล่านี้เพื่อตรวจสอบการใช้งานฟีเจอร์นี้
packages/apps/Settings/tests/robotests/src/com/android/settings/search
เป้าหมายของบิลด์คือ RunSettingsRoboTests