ไลบรารี Android ที่ออกแบบมาเพื่อลดความซับซ้อนของกระบวนการใช้งานฟังก์ชันที่เกี่ยวข้องกับการค้นหา
mavenCentral()
ลงในไฟล์ build.gradle
ระดับบนสุดของคุณ buildscript {
// ...
repositories {
// ...
mavenCentral()
}
// ...
}
build.gradle
ระดับโมดูลของคุณ dependencies {
implementation " com.paulrybitskyi.persistentsearchview:persistentsearchview:1.1.5 "
}
targetSdk
ของคุณคือ 30 และคุณต้องการใช้ฟีเจอร์ค้นหาด้วยเสียง ให้เพิ่มบรรทัดเหล่านี้ใน AndroidManifest.xml
ของแอปของคุณ : < manifest ...>
//...
< queries >
< intent >
< action android : name = " android.speech.RecognitionService " />
</ intent >
</ queries >
//...
</ manifest >
การใช้งาน PersistentSearchView พร้อมฟังก์ชันการทำงานพื้นฐานเกี่ยวข้องกับ 2 ขั้นตอนหลัก ได้แก่ การประกาศวิดเจ็ตภายในไฟล์ XML ที่คุณเลือก และการกำหนดค่าในคลาส Java/Kotlin คลาสใดคลาสหนึ่ง
ลองใช้ PersistentSearchView พร้อมฟังก์ชันพื้นฐานโดยทำตามขั้นตอนที่แสดงด้านบน:
ประกาศวิดเจ็ตภายในไฟล์ XML
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< RelativeLayout
xmlns : android = " http://schemas.android.com/apk/res/android "
xmlns : app = " http://schemas.android.com/apk/res-auto "
android : layout_width = " match_parent "
android : layout_height = " match_parent " >
<!-- Other widgets here -->
< com .paulrybitskyi.persistentsearchview.PersistentSearchView
android : id = " @+id/persistentSearchView "
android : layout_width = " match_parent "
android : layout_height = " wrap_content "
android : paddingTop = " 4dp "
android : paddingLeft = " 4dp "
android : paddingStart = " 4dp "
android : paddingRight = " 4dp "
android : paddingEnd = " 4dp " />
</ RelativeLayout >
การกำหนดค่าวิดเจ็ตในหนึ่งในคลาส Java/Kotlin
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
setContentView( R .layout.demo_activity_layout)
// ...
with (persistentSearchView) {
setOnLeftBtnClickListener {
// Handle the left button click
}
setOnClearInputBtnClickListener {
// Handle the clear input button click
}
// Setting a delegate for the voice recognition input
setVoiceRecognitionDelegate( VoiceRecognitionDelegate ( this @DemoActivity))
setOnSearchConfirmedListener { searchView, query ->
// Handle a search confirmation. This is the place where you'd
// want to perform a search against your data provider.
}
// Disabling the suggestions since they are unused in
// the simple implementation
setSuggestionsDisabled( true )
}
}
// ...
override fun onActivityResult ( requestCode : Int , resultCode : Int , data : Intent ? ) {
super .onActivityResult(requestCode, resultCode, data)
// Calling the voice recognition delegate to properly handle voice input results
VoiceRecognitionDelegate .handleResult(persistentSearchView, requestCode, resultCode, data)
}
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . demo_activity_layout );
//...
persistentSearchView . setOnLeftBtnClickListener ( new OnClickListener () {
@ Override
public void onClick ( View view ) {
// Handle the left button click
}
});
persistentSearchView . setOnClearInputBtnClickListener ( new OnClickListener () {
@ Override
public void onClick ( View view ) {
// Handle the clear input button click
}
});
// Setting a delegate for the voice recognition input
persistentSearchView . setVoiceRecognitionDelegate ( new VoiceRecognitionDelegate ( this ));
persistentSearchView . setOnSearchConfirmedListener ( new OnSearchConfirmedListener () {
@ Override
public void onSearchConfirmed ( PersistentSearchView searchView , String query ) {
// Handle a search confirmation. This is the place where you'd
// want to perform a search against your data provider.
}
});
// Disabling the suggestions since they are unused in
// the simple implementation
persistentSearchView . setSuggestionsDisabled ();
}
//...
@ Override
protected fun onActivityResult ( int requestCode , int resultCode , Intent data ) {
super . onActivityResult ( requestCode , resultCode , data );
// Calling the voice recognition delegate to properly handle voice input results
VoiceRecognitionDelegate . handleResult ( persistentSearchView , requestCode , resultCode , data );
}
การใช้งาน PersistentSearchView พร้อมคำแนะนำล่าสุดนั้นค่อนข้างจะเหมือนกับการใช้งานขั้นพื้นฐาน โดยมีข้อยกเว้นประการหนึ่ง: การกำหนดค่ามุมมอง
ในการใช้งานนี้ คุณจะต้องจัดเตรียมการกำหนดค่าเพิ่มเติมเล็กน้อยสำหรับวิดเจ็ตเพื่อแสดงคำแนะนำล่าสุดแก่ผู้ใช้ เช่น การติดตั้งใช้งานสำหรับผู้ฟังสองสามราย รวมถึงการดึงคำแนะนำจากผู้ให้บริการข้อมูลของคุณและตั้งค่าเป็นการค้นหา ดู.
ตัวอย่างเช่น นี่คือการกำหนดค่าของวิดเจ็ตพร้อมฟังก์ชันคำแนะนำล่าสุด:
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . demo_activity_layout );
//...
persistentSearchView . setOnLeftBtnClickListener ( new OnClickListener () {
@ Override
public void onClick ( View view ) {
// Handle the left button click
}
});
persistentSearchView . setOnClearInputBtnClickListener ( new OnClickListener () {
@ Override
public void onClick ( View view ) {
// Handle the clear input button click
}
});
// Setting a delegate for the voice recognition input
persistentSearchView . setVoiceRecognitionDelegate ( new VoiceRecognitionDelegate ( this ));
persistentSearchView . setOnSearchConfirmedListener ( new OnSearchConfirmedListener () {
@ Override
public void onSearchConfirmed ( PersistentSearchView searchView , String query ) {
// Handle a search confirmation. This is the place where you'd
// want to save a new query and perform a search against your
// data provider.
}
});
persistentSearchView . setOnSearchQueryChangeListener ( new OnSearchQueryChangeListener () {
@ Override
public void onSearchQueryChanged ( PersistentSearchView searchView , String oldQuery , String newQuery ) {
// Handle a search query change. This is the place where you'd
// want load new suggestions based on the newQuery parameter.
}
});
persistentSearchView . setOnSuggestionChangeListener ( new OnSuggestionChangeListener () {
@ Override
public void onSuggestionPicked ( SuggestionItem suggestion ) {
// Handle a suggestion pick event. This is the place where you'd
// want to perform a search against your data provider.
}
@ Override
public void onSuggestionRemoved ( SuggestionItem suggestion ) {
// Handle a suggestion remove event. This is the place where
// you'd want to remove the suggestion from your data provider.
}
});
}
//...
@ Override
public void onResume () {
super . onResume ();
List < String > searchQueries = null ;
// Fetching the search queries from the data provider
if ( persistentSearchView . isInputQueryEmpty ) {
searchQueries = mDataProvider . getInitialSearchQueries ();
} else {
searchQueries = mDataProvider . getSuggestionsForQuery ( persistentSearchView . inputQuery );
}
// Converting them to recent suggestions and setting them to the widget
persistentSearchView . setSuggestions ( SuggestionCreationUtil . asRecentSearchSuggestions ( searchQueries ), false );
}
//...
@ Override
protected fun onActivityResult ( int requestCode , int resultCode , Intent data ) {
super . onActivityResult ( requestCode , resultCode , data );
// Calling the voice recognition delegate to properly handle voice input results
VoiceRecognitionDelegate . handleResult ( persistentSearchView , requestCode , resultCode , data );
}
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
setContentView( R .layout.demo_activity_layout)
// ...
with (persistentSearchView) {
setOnLeftBtnClickListener {
// Handle the left button click
}
setOnClearInputBtnClickListener {
// Handle the clear input button click
}
// Setting a delegate for the voice recognition input
setVoiceRecognitionDelegate( VoiceRecognitionDelegate ( this @DemoActivity))
setOnSearchConfirmedListener { searchView, query ->
// Handle a search confirmation. This is the place where you'd
// want to save a new query and perform a search against your
// data provider.
}
setOnSearchQueryChangeListener { searchView, oldQuery, newQuery ->
// Handle a search query change. This is the place where you'd
// want load new suggestions based on the newQuery parameter.
}
setOnSuggestionChangeListener( object : OnSuggestionChangeListener {
override fun onSuggestionPicked ( suggestion : SuggestionItem ) {
// Handle a suggestion pick event. This is the place where you'd
// want to perform a search against your data provider.
}
override fun onSuggestionRemoved ( suggestion : SuggestionItem ) {
// Handle a suggestion remove event. This is the place where
// you'd want to remove the suggestion from your data provider.
}
})
}
}
// ...
override fun onResume () {
super .onResume()
// Fetching the search queries from the data provider
val searchQueries = if (persistentSearchView.isInputQueryEmpty) {
mDataProvider.getInitialSearchQueries()
} else {
mDataProvider.getSuggestionsForQuery(persistentSearchView.inputQuery)
}
// Converting them to recent suggestions and setting them to the widget
persistentSearchView.setSuggestions( SuggestionCreationUtil .asRecentSearchSuggestions(searchQueries), false )
}
// ...
override fun onActivityResult ( requestCode : Int , resultCode : Int , data : Intent ? ) {
super .onActivityResult(requestCode, resultCode, data)
// Calling the voice recognition delegate to properly handle voice input results
VoiceRecognitionDelegate .handleResult(persistentSearchView, requestCode, resultCode, data)
}
การใช้งาน PersistentSearchView พร้อมคำแนะนำทั่วไปจะเหมือนกับการใช้งานคำแนะนำล่าสุดขั้นพื้นฐาน โดยมีข้อยกเว้นหนึ่งข้อ: วิธีสร้างคำแนะนำ asRecentSearchSuggestions(searchQueries) ควรแทนที่ด้วย asRegularSearchSuggestions(searchQueries)
ดูแอปตัวอย่าง
ข้อแตกต่างระหว่างคำแนะนำล่าสุดและคำแนะนำทั่วไปคือ ผู้ใช้สามารถลบคำแนะนำล่าสุดออกจากรายการได้ ในขณะที่คำแนะนำทั่วไปไม่สามารถลบออกได้ (ไม่มีปุ่มลบในคำแนะนำทั่วไป)
ตัวอย่างเช่น นี่คือภาพหน้าจอของคำแนะนำล่าสุดเมื่อเทียบกับปกติ:
ล่าสุด | ปกติ |
ดูไฟล์ CONTRIBUTING.md
นกฮูก |
ใช้ PersistentSearchView ในแอปของคุณและต้องการให้แสดงที่นี่หรือไม่ ส่งอีเมลถึงฉันที่ [email protected]!
PersistentSearchView ได้รับอนุญาตภายใต้ลิขสิทธิ์ Apache 2.0