Uma caixa de diálogo de pesquisa incrível e personalizável com opções de pesquisa integradas.
Primeiro adicione o jitpack ao arquivo build.gradle do seu projeto
allprojects {
repositories {
.. .
maven { url " https://jitpack.io " }
}
}
Em seguida, adicione a dependência no arquivo build.gradle dos módulos
dependencies {
implementation ' com.github.mirrajabi:search-dialog:1.2.4 '
}
se você quiser apenas usar a caixa de diálogo de pesquisa simples, primeiro precisará fornecer itens pesquisáveis. para conseguir isso, você deve implementar Searchable em seu modelo.
você pode ver o SampleSearchModel por exemplo:
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 ;
}
}
agora gere algumas opções de pesquisa em sua atividade:
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 ;
}
então você só precisa adicionar as linhas abaixo onde deseja mostrar a caixa de diálogo:
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 ();
Os parâmetros do construtor são
SimpleSearchDialogCompat ( Context context , String title , String searchHint ,
@ Nullable Filter filter , ArrayList < T > items ,
SearchResultListener < T > searchResultListener )
Basta usar setLoading(true)
para mostrar e setLoading(false)
para ocultá-lo em uma instância de SimpleSearchDialogCompat
Se você quiser alterar as cores padrão, basta substituir essas cores no seu colors.xml
ou onde quiser, assim.
< color name = " searchDialogResultColor " />
< color name = " searchDialogResultHighlightColor " />
Usei esse layout para uma caixa de diálogo de pesquisa simples, mas você pode usar qualquer outra coisa. É claro que seu layout deve ter estas duas visualizações:
Você pode usar seus layouts personalizados, adaptadores e opções de pesquisa criando uma classe que herda BaseSearchDialogCompat. Dê uma olhada em SimpleSearchDialogCompat para ver um exemplo de como isso pode ser feito. Você deve implementar os métodos 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 ();
Você pode usar seus filtros personalizados para pesquisa de texto. O usado em SimpleSearchDialogCompat é SimpleSearchFilter. Ele verifica a chave de pesquisa e se um item e a chave tiverem letras parcialmente exatas, ele adicionará esse item aos resultados e também se o CheckLCS foi definido como verdadeiro, ele verificará se a quantidade de letras correspondentes foi maior que o AccuracyPercentage fornecido. o item será adicionado aos resultados
aquele usado em SimpleSearchDialogCompat é tão simples apesar de ser muito longo. a principal funcionalidade está no método inicializeViews. você pode criar seus adaptadores personalizados e usá-los em vez deste
possui dois métodos que você pode usar para destacar os resultados.
/*
* 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.