Потрясающий и настраиваемый диалог поиска со встроенными параметрами поиска.
Сначала добавьте jitpack в файл build.gradle вашего проекта.
allprojects {
repositories {
.. .
maven { url " https://jitpack.io " }
}
}
Затем добавьте зависимость в файл модулей build.gradle.
dependencies {
implementation ' com.github.mirrajabi:search-dialog:1.2.4 '
}
Если вы просто хотите использовать простое диалоговое окно поиска, вам необходимо сначала предоставить элементы, доступные для поиска. для этого вам следует реализовать возможность поиска в своей модели.
вы можете увидеть SampleSearchModel, например:
public class SampleSearchModel implements Searchable {
private String mTitle ;
public SampleSearchModel ( String title ) {
mTitle = title ;
}
@ Override
public String getTitle () {
return mTitle ;
}
public SampleSearchModel setTitle ( String title ) {
mTitle = title ;
return this ;
}
}
теперь создайте несколько параметров поиска в своей деятельности:
private ArrayList < SampleSearchModel > createSampleData (){
ArrayList < SampleSearchModel > items = new ArrayList <>();
items . add ( new SampleSearchModel ( "First item" ));
items . add ( new SampleSearchModel ( "Second item" ));
items . add ( new SampleSearchModel ( "Third item" ));
items . add ( new SampleSearchModel ( "The ultimate item" ));
items . add ( new SampleSearchModel ( "Last item" ));
items . add ( new SampleSearchModel ( "Lorem ipsum" ));
items . add ( new SampleSearchModel ( "Dolor sit" ));
items . add ( new SampleSearchModel ( "Some random word" ));
items . add ( new SampleSearchModel ( "guess who's back" ));
return items ;
}
тогда вам просто нужно добавить строки ниже, где вы хотите отобразить диалоговое окно:
new SimpleSearchDialogCompat ( MainActivity . this , "Search..." ,
"What are you looking for...?" , null , createSampleData (),
new SearchResultListener < SampleSearchModel >() {
@ Override
public void onSelected ( BaseSearchDialogCompat dialog ,
SampleSearchModel item , int position ) {
// If filtering is enabled, [position] is the index of the item in the filtered result, not in the unfiltered source
Toast . makeText ( MainActivity . this , item . getTitle (),
Toast . LENGTH_SHORT ). show ();
dialog . dismiss ();
}
}). show ();
Параметры конструктора:
SimpleSearchDialogCompat ( Context context , String title , String searchHint ,
@ Nullable Filter filter , ArrayList < T > items ,
SearchResultListener < T > searchResultListener )
Просто используйте setLoading(true)
для отображения и setLoading(false)
для его скрытия в экземпляре SimpleSearchDialogCompat.
Если вы хотите изменить цвета по умолчанию, просто переопределите эти цвета в своем colors.xml
или где угодно.
< color name = " searchDialogResultColor " />
< color name = " searchDialogResultHighlightColor " />
Я использовал этот макет для простого диалогового окна поиска, но вы можете использовать что-нибудь еще. Конечно, ваш макет должен иметь следующие два представления:
Вы можете использовать свои собственные макеты, адаптеры и параметры поиска, создав класс, наследующий BaseSearchDialogCompat. Посмотрите SimpleSearchDialogCompat, чтобы увидеть пример того, как это можно сделать. Вам следует реализовать методы BaseSearchDialogCompat:
// handle your view with this one
protected abstract void getView ( View view );
// Id of your custom layout
@ LayoutRes protected abstract int getLayoutResId ();
// Id of the search edittext you used in your custom layout
@ IdRes protected abstract int getSearchBoxId ();
// Id of the recyclerview you used in your custom layout
@ IdRes protected abstract int getRecyclerViewId ();
Вы можете использовать свои собственные фильтры для поиска текста. В SimpleSearchDialogCompat используется SimpleSearchFilter. Он проверяет ключ поиска, и если элемент и ключ имеют частично одинаковые буквы, он добавляет этот элемент в результаты, а также, если для CheckLCS установлено значение true, он проверяет, было ли количество совпадающих букв больше заданного AccuracyPercentage. элемент будет добавлен в результаты
тот, который используется в SimpleSearchDialogCompat, настолько прост, несмотря на то, что он слишком длинный. основная функциональность находится в методе InitializeViews. вы можете создать свои собственные адаптеры и использовать их вместо этого
у него есть два метода, которые вы можете использовать для выделения результатов.
/*
* Returns a SpannableString with
* highlighted LCS(Longest Common Subsequence)
* of two strings with the givven color
*/
SpannableStringBuilder highlightLCS ( String text1 , String text2 , int highlightColor );
// Returns the LCS(Longest Common Subsequence) of two strings
String lcs ( String text1 , String text2 )
1.2.4 — Added an option to SimpleSearchDialogCompat so that the dialog cancellation on touching outside the dialog can be customized.
1.2.3 — Changed minSdkVersion to 14. Added getter for the title textview of simple search dialog. Improved results sorting.
1.2.2 — Gradle tools version and dependencies were updated.
1.2.1 - Added an option for changing text color and highlight color of default adapter.
1.2 — Added getter for views in simple search dialog and an option to turn off the auto filtering on search edittext.
1.1.1 — Fixes drawable overriding issue.
1.1 - Added loading feature.