การกำหนดค่าการค้นหา

ลองใช้วิธีแบบ Compose
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนำสำหรับ Android ดูวิธีเพิ่มฟังก์ชันการค้นหาใน Compose

หากต้องการใช้การค้นหาโดยรับความช่วยเหลือจากระบบ Android กล่าวคือ ส่งคำค้นหา ไปยังกิจกรรมและแสดงคำแนะนำในการค้นหา แอปพลิเคชันของคุณต้องมีการกำหนดค่าการค้นหา ในรูปแบบไฟล์ XML

หน้านี้อธิบายไฟล์การกำหนดค่าการค้นหาในแง่ของไวยากรณ์และการใช้งาน ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ฟีเจอร์การค้นหาสำหรับแอปพลิเคชันของคุณได้ที่สร้างอินเทอร์เฟซการค้นหา

ตำแหน่งไฟล์:
res/xml/filename.xml
Android ใช้ชื่อไฟล์เป็นรหัสทรัพยากร
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="string resource"
    android:hint="string resource"
    android:searchMode=["queryRewriteFromData" | "queryRewriteFromText"]
    android:searchButtonText="string resource"
    android:inputType="inputType"
    android:imeOptions="imeOptions"
    android:searchSuggestAuthority="string"
    android:searchSuggestPath="string"
    android:searchSuggestSelection="string"
    android:searchSuggestIntentAction="string"
    android:searchSuggestIntentData="string"
    android:searchSuggestThreshold="int"
    android:includeInGlobalSearch=["true" | "false"]
    android:searchSettingsDescription="string resource"
    android:queryAfterZeroResults=["true" | "false"]
    android:voiceSearchMode=["showVoiceSearchButton" | "launchWebSearch" | "launchRecognizer"]
    android:voiceLanguageModel=["free-form" | "web_search"]
    android:voicePromptText="string resource"
    android:voiceLanguage="string"
    android:voiceMaxResults="int"
    >
    <actionkey
        android:keycode="KEYCODE"
        android:queryActionMsg="string"
        android:suggestActionMsg="string"
        android:suggestActionMsgColumn="string" />
</searchable>
องค์ประกอบ
<searchable>
กำหนดค่าการค้นหาทั้งหมดที่ระบบ Android ใช้เพื่อให้บริการค้นหาที่ช่วย

แอตทริบิวต์

android:label
ทรัพยากรสตริง (ต้องใช้) ชื่อของแอปพลิเคชัน ต้องเป็นชื่อเดียวกับ ชื่อที่ใช้กับแอตทริบิวต์ android:label ของ <activity> หรือ <application> องค์ประกอบ Manifest ป้ายกำกับนี้จะแสดงต่อผู้ใช้เมื่อคุณตั้งค่า android:includeInGlobalSearchเป็น "true" เท่านั้น ในกรณีนี้ ระบบจะใช้ป้ายกำกับนี้ เพื่อระบุแอปพลิเคชันของคุณเป็นรายการที่ค้นหาได้ในการตั้งค่าการค้นหาของระบบ
android:hint
ทรัพยากรสตริง (แนะนำ) ข้อความที่จะแสดงในช่องข้อความค้นหาเมื่อ ไม่มีการป้อนข้อความ โดยจะให้คำแนะนำแก่ผู้ใช้เกี่ยวกับเนื้อหาที่ค้นหาได้ เพื่อความสอดคล้อง กับแอปพลิเคชัน Android อื่นๆ ให้จัดรูปแบบสตริงสำหรับ android:hint เป็น "ค้นหา <เนื้อหาหรือผลิตภัณฑ์>" เช่น "ค้นหาเพลงและศิลปิน" หรือ "ค้นหาใน YouTube"
android:searchMode
คีย์เวิร์ด ตั้งค่าโหมดเพิ่มเติมที่ควบคุมการนำเสนอการค้นหา โหมดที่ใช้ได้จะกำหนดวิธีเขียนข้อความค้นหาใหม่เมื่อคำแนะนำที่กำหนดเองได้รับโฟกัส ค่าโหมดที่ยอมรับมีดังนี้
ค่าคำอธิบาย
"queryRewriteFromData" ใช้ค่าจากคอลัมน์ SUGGEST_COLUMN_INTENT_DATA เพื่อเขียนข้อความ bquery ใหม่ ต้องใช้ในกรณีที่ค่าใน SUGGEST_COLUMN_INTENT_DATA เหมาะสมสำหรับการตรวจสอบและแก้ไขของผู้ใช้เท่านั้น เช่น URI ของ HTTP
"queryRewriteFromText" ใช้ค่าจากคอลัมน์ SUGGEST_COLUMN_TEXT_1 เพื่อเขียนข้อความค้นหาใหม่

ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับการเขียนข้อความค้นหาใหม่ใน เพิ่มคำแนะนำในการค้นหาที่กำหนดเอง

android:searchButtonText
ทรัพยากรสตริง ข้อความที่จะแสดงในปุ่มที่ดำเนินการค้นหา โดย ค่าเริ่มต้น ปุ่มจะแสดงไอคอนค้นหา (แว่นขยาย) ซึ่งเหมาะสำหรับ การแปล ดังนั้นอย่าใช้แอตทริบิวต์นี้เพื่อเปลี่ยนปุ่ม เว้นแต่ลักษณะการทำงานจะเป็นอย่างอื่นนอกเหนือจากการค้นหา เช่น คำขอ URL ในเว็บเบราว์เซอร์
android:inputType
คีย์เวิร์ด กำหนดประเภทวิธีการป้อนข้อมูลที่จะใช้ เช่น ประเภทแป้นพิมพ์ ซอฟต์แวร์ สำหรับการค้นหาส่วนใหญ่ซึ่งคาดว่าจะใช้ข้อความแบบอิสระ คุณไม่จำเป็นต้องมีแอตทริบิวต์นี้ ดู inputType เพื่อดูรายการค่าที่เหมาะสมสำหรับแอตทริบิวต์นี้
android:imeOptions
คีย์เวิร์ด มีตัวเลือกเพิ่มเติมสำหรับวิธีการป้อนข้อมูล สำหรับการค้นหาส่วนใหญ่ซึ่งคาดว่าจะใช้ข้อความแบบอิสระ คุณไม่จำเป็นต้องใช้แอตทริบิวต์นี้ IME เริ่มต้นคือ actionSearch ซึ่งมีปุ่ม "ค้นหา" แทนการขึ้นบรรทัดใหม่ใน แป้นพิมพ์เสมือน ดู imeOptions เพื่อดูรายการค่าที่เหมาะสมสำหรับแอตทริบิวต์นี้

แอตทริบิวต์ของคำแนะนำในการค้นหา

หากกำหนดผู้ให้บริการเนื้อหาเพื่อสร้างคำแนะนำในการค้นหา คุณจะต้องกำหนด แอตทริบิวต์เพิ่มเติมที่กำหนดค่าการสื่อสารกับผู้ให้บริการเนื้อหา เมื่อแสดงคำแนะนำในการค้นหา คุณต้องมีแอตทริบิวต์ <searchable> ต่อไปนี้


android:searchSuggestAuthority
สตริง (ต้องระบุเพื่อแสดงคำแนะนำในการค้นหา) ค่านี้ต้องตรงกับสตริงของ Authority ที่ระบุไว้ในแอตทริบิวต์ android:authorities ขององค์ประกอบ <provider> ในไฟล์ Manifest ของ Android
android:searchSuggestPath
สตริง เส้นทางนี้ใช้เป็นส่วนหนึ่งของคำแนะนำ คำค้นหา Uri หลังจากคำนำหน้าและ Authority และก่อนเส้นทางคำแนะนำมาตรฐาน คุณจะต้องระบุพารามิเตอร์นี้ก็ต่อเมื่อมีผู้ให้บริการเนื้อหารายเดียวที่ออกคำแนะนำประเภทต่างๆ เช่น สำหรับข้อมูลประเภทต่างๆ และคุณต้องการวิธีแยกความแตกต่างของคำค้นหาคำแนะนำเมื่อได้รับคำค้นหาเหล่านั้น
android:searchSuggestSelection
สตริง ระบบจะส่งค่านี้ไปยังฟังก์ชันการค้นหาเป็นพารามิเตอร์ selection โดยปกติแล้วจะเป็นคําสั่ง WHERE สําหรับฐานข้อมูล และต้องมีเครื่องหมายคําถามเพียงเครื่องหมายเดียวเป็นตัวยึดตําแหน่งสําหรับ สตริงคําค้นหาจริงที่ผู้ใช้ป้อน เช่น "query=?" อย่างไรก็ตาม คุณยังใช้ค่าที่ไม่ใช่ค่าว่างเพื่อทริกเกอร์การนำส่งข้อความค้นหาได้โดยใช้พารามิเตอร์ selectionArgs แล้วไม่สนใจพารามิเตอร์ selection
android:searchSuggestIntentAction
สตริง การดำเนินการผ่าน Intent เริ่มต้นที่จะใช้เมื่อผู้ใช้ แตะคำแนะนำการค้นหาที่กำหนดเอง เช่น "android.intent.action.VIEW" หากค่านี้ไม่ถูกลบล้างโดยคำแนะนำที่เลือกโดยใช้คอลัมน์ SUGGEST_COLUMN_INTENT_ACTION ระบบจะวางค่าไว้ในช่องการกระทำของ Intent เมื่อผู้ใช้แตะ คำแนะนำ
android:searchSuggestIntentData
สตริง ข้อมูลความตั้งใจเริ่มต้นที่จะใช้เมื่อผู้ใช้ แตะคำแนะนำการค้นหาที่กำหนดเอง หากไม่ได้ลบล้างโดยคำแนะนำที่เลือกผ่านคอลัมน์ SUGGEST_COLUMN_INTENT_DATA ระบบจะวางค่านี้ในช่องข้อมูลของ Intent เมื่อผู้ใช้แตะ คำแนะนำ
android:searchSuggestThreshold
จำนวนเต็ม จำนวนอักขระขั้นต่ำที่ต้องใช้เพื่อ เรียกการค้นหาคำแนะนำ ซึ่งรับประกันได้เพียงว่าระบบจะไม่ค้นหาเนื้อหาที่สั้นกว่าเกณฑ์จากผู้ให้บริการเนื้อหา ค่าเริ่มต้นคือ 0

ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์ข้างต้นสำหรับคำแนะนำในการค้นหาได้ในเอกสารประกอบ สำหรับการเพิ่มคำแนะนำในการค้นหาที่กำหนดเองและ การเพิ่มคำแนะนำที่กำหนดเอง

แอตทริบิวต์ของช่องค้นหาแบบรวดเร็ว

หากต้องการให้คำแนะนำการค้นหาที่กำหนดเองพร้อมใช้งานในช่องค้นหาแบบรวดเร็ว คุณต้องมี<searchable>แอตทริบิวต์ต่อไปนี้


android:includeInGlobalSearch
บูลีน (ต้องระบุเพื่อแสดงคำแนะนำในการค้นหาใน ช่องค้นหาแบบรวดเร็ว) ตั้งค่าเป็น "true" หากต้องการให้ระบบรวมคำแนะนำของคุณ ไว้ในช่องค้นหาแบบรวดเร็วที่เข้าถึงได้ทั่วโลก ผู้ใช้ยังคงต้องเปิดใช้แอปพลิเคชันของคุณเป็นรายการที่ค้นหาได้ในการตั้งค่าการค้นหาระบบก่อนที่คำแนะนำจะปรากฏในช่องค้นหาแบบรวดเร็ว
android:searchSettingsDescription
ทรัพยากรสตริง อธิบายสั้นๆ เกี่ยวกับคำแนะนำในการค้นหาที่คุณระบุในช่องค้นหาแบบรวดเร็ว ซึ่งจะแสดงในรายการที่ค้นหาได้ของแอปพลิเคชัน คำอธิบายต้องอธิบายเนื้อหาที่ค้นหาได้โดยย่อ เช่น "ศิลปิน อัลบั้ม และแทร็ก" สำหรับแอปพลิเคชันเพลง หรือ "โน้ตที่บันทึกไว้" สำหรับ แอปพลิเคชัน Notepad
android:queryAfterZeroResults
บูลีน ตั้งค่าเป็น "true" หากต้องการให้เรียกใช้ผู้ให้บริการเนื้อหาสำหรับชุดคำค้นหาที่ใหญ่กว่าซึ่งก่อนหน้านี้ไม่แสดงผลลัพธ์ ตัวอย่างเช่น หาก ผู้ให้บริการเนื้อหาแสดงผลลัพธ์เป็น 0 สำหรับคำว่า "bo" คุณต้องส่งคำค้นหาอีกครั้งสำหรับคำว่า "bob" หากตั้งค่าเป็น "false" ระบบจะไม่สนใจ SuperSet สำหรับเซสชันเดียว ซึ่ง "bob" จะไม่เรียกใช้การค้นหาอีกครั้ง โดยจะคงอยู่เฉพาะในช่วงเวลาของกล่องโต้ตอบการค้นหาหรือช่วงเวลาของ กิจกรรมเมื่อใช้เครื่องมือค้นหา เมื่อเปิดกล่องโต้ตอบการค้นหาหรือกิจกรรมอีกครั้ง "bo" จะค้นหาผู้ให้บริการเนื้อหาของคุณอีกครั้ง ค่าเริ่มต้นคือ false

แอตทริบิวต์การค้นหาด้วยเสียง

หากต้องการเปิดใช้การค้นหาด้วยเสียง คุณต้องมีแอตทริบิวต์ต่อไปนี้ <searchable>


android:voiceSearchMode
คีย์เวิร์ด (ต้องระบุเพื่อให้บริการค้นหาด้วยเสียง) เปิดใช้การค้นหาด้วยเสียง โดยมีโหมดเฉพาะสำหรับการค้นหาด้วยเสียง อุปกรณ์อาจไม่ได้ให้บริการค้นหาด้วยเสียง ในกรณีนี้ แฟล็กเหล่านี้ จะไม่มีผล ค่าโหมดที่ยอมรับมีดังนี้
ค่าคำอธิบาย
"showVoiceSearchButton" แสดงปุ่มค้นหาด้วยเสียง หากการค้นหาด้วยเสียงพร้อมใช้งานในอุปกรณ์ หากตั้งค่าไว้ จะต้องตั้งค่า "launchWebSearch" หรือ "launchRecognizer" ด้วย โดยคั่นด้วยอักขระไปป์ (|)
"launchWebSearch" ปุ่มค้นหาด้วยเสียงจะนำผู้ใช้ไปยังกิจกรรมการค้นหาเว็บด้วยเสียงในตัวโดยตรง แอปพลิเคชันส่วนใหญ่ไม่ได้ใช้ Flag นี้ เนื่องจาก จะนำผู้ใช้ออกจากกิจกรรมที่เรียกใช้การค้นหา
"launchRecognizer" ปุ่มค้นหาด้วยเสียงจะนำ ผู้ใช้ไปยังกิจกรรมการบันทึกเสียงในตัวโดยตรง กิจกรรมนี้ จะแจ้งให้ผู้ใช้พูด ถอดเสียงข้อความที่พูด และส่งต่อข้อความค้นหาที่ได้ ไปยังกิจกรรมที่ค้นหาได้ เหมือนกับว่าผู้ใช้พิมพ์ข้อความลงใน UI การค้นหาแล้วแตะปุ่มค้นหา
android:voiceLanguageModel
คีย์เวิร์ด โมเดลภาษาที่ระบบจดจำเสียงต้องใช้ ค่าที่ยอมรับมีดังนี้
ค่าคำอธิบาย
"free_form" ใช้การจดจำคำพูดแบบอิสระเพื่อเขียนคำค้นหาตามคำบอก ซึ่งได้รับการเพิ่มประสิทธิภาพสำหรับภาษาอังกฤษเป็นหลัก โดยตัวเลือกนี้คือค่าเริ่มต้น
"web_search" ใช้การจดจำคำค้นหาบนเว็บสำหรับวลีที่สั้นลงและคล้ายกับการค้นหา ซึ่งมีให้บริการในภาษามากกว่า "free_form"

ดูข้อมูลเพิ่มเติมได้ที่ EXTRA_LANGUAGE_MODEL

android:voicePromptText
ทรัพยากรสตริง ข้อความเพิ่มเติมที่จะแสดงในกล่องโต้ตอบการป้อนข้อมูลด้วยเสียง
android:voiceLanguage
สตริง ภาษาที่พูดที่คาดไว้ ซึ่งแสดงเป็นค่าสตริงของ ค่าคงที่ใน Locale เช่น "de" สำหรับภาษาเยอรมันหรือ "fr" สำหรับภาษาฝรั่งเศส คุณต้องระบุค่านี้ก็ต่อเมื่อค่านี้แตกต่างจากค่าปัจจุบันของ Locale.getDefault()
android:voiceMaxResults
จำนวนเต็ม กำหนดจำนวนผลลัพธ์สูงสุดที่จะแสดง รวมถึงผลลัพธ์ที่ "ดีที่สุด" ซึ่งจะแสดงเป็น ACTION_SEARCH การค้นหาหลักของเจตนาเสมอ ต้องมากกว่าหรือเท่ากับ 1 ใช้ EXTRA_RESULTS เพื่อรับผลลัพธ์จาก Intent หากไม่ได้ระบุไว้ ตัวจดจำจะเลือกจำนวนผลลัพธ์ที่จะแสดง
<actionkey>
กำหนดคีย์และลักษณะการทำงานของอุปกรณ์สำหรับการดำเนินการค้นหา การดำเนินการค้นหาจะให้ลักษณะการทำงานพิเศษ เมื่อแตะปุ่มบนอุปกรณ์ โดยอิงตามคำค้นหาปัจจุบันหรือคำแนะนำที่โฟกัส ตัวอย่างเช่น แอปพลิเคชันรายชื่อผู้ติดต่อจะมีการดำเนินการค้นหาเพื่อเริ่มการโทร ไปยังคำแนะนำรายชื่อติดต่อที่โฟกัสอยู่ในปัจจุบันเมื่อแตะปุ่มโทร

ปุ่มการดำเนินการบางปุ่มอาจไม่พร้อมใช้งานในอุปกรณ์บางเครื่อง และปุ่มบางปุ่มอาจไม่สามารถลบล้างได้ด้วยวิธีนี้ เช่น คุณจะลบล้างคีย์ "หน้าแรก" ไม่ได้ และต้องกลับไปที่หน้าจอหลักเสมอ นอกจากนี้ โปรดอย่ากำหนดปุ่มดำเนินการสำหรับปุ่มที่จำเป็นสำหรับการพิมพ์คำค้นหา ซึ่งจะจำกัดคีย์การดำเนินการที่พร้อมใช้งานและสมเหตุสมผลไว้ที่ปุ่มโทรและปุ่มเมนู

คุณต้องกำหนด android:keycode เพื่อกำหนดคีย์และแอตทริบิวต์อื่นๆ อีก 3 รายการอย่างน้อย 1 รายการเพื่อกำหนดการดำเนินการค้นหา

แอตทริบิวต์

android:keycode
สตริง (ต้องใช้) รหัสแป้นจาก KeyEvent ที่แสดง ปุ่มดำเนินการที่คุณต้องการตอบสนอง เช่น "KEYCODE_CALL" ระบบจะเพิ่ม นี้ลงใน ACTION_SEARCH Intent ที่ส่งไปยังกิจกรรมที่ค้นหาได้ หากต้องการตรวจสอบรหัสคีย์ ให้ใช้ getIntExtra(SearchManager.ACTION_KEY) แป้นบางแป้นไม่รองรับการดำเนินการค้นหา เนื่องจากแป้นหลายแป้นใช้สำหรับการพิมพ์ การนำทาง หรือฟังก์ชันของระบบ
android:queryActionMsg
สตริง ข้อความการดำเนินการที่จะส่งหากมีการกดปุ่มดำเนินการขณะที่ ผู้ใช้ป้อนข้อความค้นหา โดยจะเพิ่มลงใน ACTION_SEARCH Intent ที่ระบบส่งไปยังกิจกรรมที่ค้นหาได้ หากต้องการตรวจสอบสตริง ให้ใช้ getStringExtra(SearchManager.ACTION_MSG)
android:suggestActionMsg
สตริง ข้อความการดำเนินการที่จะส่งหากกดปุ่มการดำเนินการขณะที่ คำแนะนำอยู่ในโฟกัส โดยจะเพิ่มลงใน Intent ที่ระบบส่งไปยังกิจกรรมที่ค้นหาได้ โดยใช้การดำเนินการที่คุณกำหนดไว้สำหรับคำแนะนำ หากต้องการตรวจสอบ สตริง ให้ใช้ getStringExtra(SearchManager.ACTION_MSG) คุณควรใช้ปุ่มนี้ก็ต่อเมื่อคำแนะนำทั้งหมดรองรับปุ่มดำเนินการนี้ หากคำแนะนำบางรายการไม่สามารถจัดการปุ่มดำเนินการเดียวกันได้ คุณต้องใช้แอตทริบิวต์ android:suggestActionMsgColumn ต่อไปนี้แทน
android:suggestActionMsgColumn
สตริง ชื่อคอลัมน์ในผู้ให้บริการเนื้อหาที่กำหนดข้อความการดำเนินการสำหรับปุ่มดำเนินการนี้ ซึ่งจะส่งหากผู้ใช้กดปุ่มดำเนินการขณะที่โฟกัสอยู่ที่คำแนะนำ แอตทริบิวต์นี้ช่วยให้คุณควบคุมปุ่มดำเนินการในระดับคำแนะนำแต่ละรายการได้ เนื่องจากแต่ละรายการในผู้ให้บริการเนื้อหาจะมีข้อความการดำเนินการของตัวเองแทนที่จะใช้แอตทริบิวต์ android:suggestActionMsg เพื่อกำหนดข้อความการดำเนินการสำหรับคำแนะนำทั้งหมด

ก่อนอื่นคุณต้องกำหนดคอลัมน์ในผู้ให้บริการเนื้อหาสำหรับคำแนะนำแต่ละรายการเพื่อระบุ ข้อความการดำเนินการ จากนั้นระบุชื่อคอลัมน์นั้นในแอตทริบิวต์นี้ ระบบ จะดูเคอร์เซอร์คำแนะนำ โดยใช้สตริงที่ระบุไว้ที่นี่เพื่อเลือกคอลัมน์ข้อความการดำเนินการ จากนั้นเลือกสตริงข้อความการดำเนินการจากเคอร์เซอร์ ระบบจะเพิ่มสตริงดังกล่าวลงใน Intent ที่ระบบส่งไปยังกิจกรรมที่ค้นหาได้ โดยใช้การดำเนินการที่คุณ กำหนดไว้สำหรับคำแนะนำ หากต้องการตรวจสอบสตริง ให้ใช้ getStringExtra(SearchManager.ACTION_MSG) หากไม่มีข้อมูลสําหรับคําแนะนําที่เลือก ระบบจะไม่สนใจปุ่มดำเนินการ

ตัวอย่าง:
บันทึกไฟล์ XML ที่ res/xml/searchable.xml แล้ว
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/search_label"
    android:hint="@string/search_hint"
    android:searchSuggestAuthority="dictionary"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:includeInGlobalSearch="true"
    android:searchSettingsDescription="@string/settings_description" >
</searchable>