SuperSearch
一个开源的ohos Java库,旨在简化多终端搜索相关功能的实现。
|
||
---|---|---|
entry | ||
gradle/wrapper | ||
libs | ||
out | ||
supersearch | ||
.gitignore | ||
build.gradle | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
LICENSE | ||
package.json | ||
README.md | ||
settings.gradle |
SuperSearch
项目介绍
一个开源的ohos Java 库,旨在简化多终端搜索相关功能的实现。
功能列表
- 支持模糊匹配以及精确匹配
- 支持开启、关闭搜索记录
- 自带搜索算法
- 支持超多功能自定义
- 代码高可扩展性
- 支持多设备使用
- 支持开箱即用
使用教程
- 方法一:
使用前需先导入SuperSearch依赖,并在所对应的模块build.gradle中添加依赖
allprojects {
repositories {
mavenCentral()
}
}
...
dependencies {
...
implementation 'top.xuegao-tzx:SuperSearch:1.2.3.517'
...
}
- 方式二:
- 下载模块代码添加到自己的工程
- 关联使用
dependencies {
implementation project(":supersearch")
……
}
使用说明
- 添加SuperSearch
1. 加载动画(一个加载中的圆圈)
<!--示例-->
<com.xcl.supersearch.RoundProgressBar
ohos:id="$id:progressBar"
ohos:height="40vp"
ohos:width="40vp"
ohos:center_in_parent="true"
ohos:visibility="hide"
app:round_progress_color="#FF82F8EF"
app:round_progress_with="5f"
/>
<!--圆的颜色-->
app:round_progress_color="#FF82F8EF"
<!--圆的粗细-->
app:round_progress_with="5f"
2. 搜索框
通过 XML 进行定制
<!--示例-->
<com.xcl.supersearch.SearchView
ohos:id="$+id:searchView"
ohos:height="match_parent"
ohos:left_padding="15vp"
ohos:right_padding="15vp"
ohos:visibility="visible"
ohos:width="match_parent"
ohos:padding="5vp"
app:search_history="$media:ic_history_black_24dp"
app:delete_search_history="$media:ic_close_black_24dp"
app:isDebugEnabled="true"
app:nullWarnByMySelf="true"
app:null_warn_text="$string:search_input_null"
app:null_warn_text_color="#79FF006E"
app:noneWarnByMySelf="true"
app:none_warn_text="$string:search_answer_none"
app:none_warn_text_color="#5CFF0000"
app:suggestion_count="6"
app:queryInput_hint_text="$string:search_hint_text"
app:background_mask_degree="0.35f"
app:queryRadius="5vp"
app:rightButton_Clear="$graphic:ic_close"
app:isrightButton_ClearEnabled="true"
app:leftButton_Back="$graphic:ic_arrow_left"
app:leftButton_Loadding_color="#FF1300FF"
app:queryInput_background_color="#FFF8F3EC"
app:queryInput_buttom_color="#A18770B1"
app:queryInput_cursor_color="#FF8377FF"
app:queryInput_hint_color="#FFFF0000"
app:queryInput_text_color="#FF6B16FF"
/>
<!--是否开启日志输出,默认关闭-->
app:isDebugEnabled="true"
<!--是否为手表,默认不是-->
app:isWearable="true"
<!--颜色为16进制值-->
<!--搜索时背景颜色遮罩程度(0最小,到1最大)-->
app:background_mask_degree="0.3f"
<!--搜索时背景的遮罩颜色-->
app:background_mask_color="#FFADEA6C"
<!--搜索边框圆角半径-->
app:queryRadius="5vp"
<!--搜索建议显示条数(仅在已开启搜索建议时有效)-->
app:suggestion_count="6"
<!--搜索建议中每一条的左侧图标(仅在已开启搜索建议时有效)-->
app:search_history="$graphic:ic_history_black"<!--注意:此处仅支持graphic中的文件,如果是其它格式请使用下方提供的工具进行转换或自行转换-->
<!--搜索建议中每一条的右侧图标(仅在已开启搜索建议时有效)-->
app:delete_search_history="$graphic:ic_close"<!--注意:此处仅支持graphic中的文件,如果是其它格式请使用下方提供的工具进行转换或自行转换-->
<!--搜索输入光标的颜色-->
app:queryInput_cursor_color="#FF8377FF"
<!--搜索输入提示的颜色-->
app:queryInput_hint_color="#FFFF0000"
<!--搜索输入的提示文本-->
app:queryInput_hint_text="$string:search_hint_text"
<!--搜索输入文本的颜色-->
app:queryInput_text_color="#FF000000"
<!--搜索输入框背景颜色-->
app:queryInput_background_color="#FFF8F3EC"
<!--搜索输入框下侧分割线颜色-->
app:queryInput_buttom_color="#A18770B1"
<!--搜索输入框右侧按钮图标(不配置就会自动不显示)-->
app:rightButton="$graphic:ic_filters"
<!--搜索输入框右侧清空按钮图标X-->
app:rightButton_Clear="$graphic:ic_close"
<!--搜索输入框右侧清空按钮是否可用-->
app:isrightButton_ClearEnabled="true"
<!--搜索输入框左侧搜索加载动画图标O颜色-->
app:leftButton_Loadding_color="#FF1300FF"
<!--搜索输入框左侧返回按钮图标-->
app:leftButton_Back="$graphic:ic_arrow_left"
<!--搜索输入值为空-->
<!--搜索输入值为空时,是否自定义出错信息,注意:不会影响默认告警,只是你可以增加其它你想做的-->
app:nullWarnByMySelf="true"
<!--搜索输入值为空时,自定义出错信息中的提示文字,不配置会走默认值-->
app:null_warn_text="$string:search_input_null"
<!--搜索输入值为空时,自定义出错信息中的提示文字颜色,不配置会走默认值-->
app:null_warn_text_color="#FFFF006E"
<!--搜索结果值为空-->
<!--搜索结果值为空时,是否自定义出错信息,注意:不会影响默认告警,只是你可以增加其它你想做的-->
app:noneWarnByMySelf="true"
<!--搜索结果值为空时,自定义出错信息中的提示文字,不配置会走默认值-->
app:none_warn_text="$string:search_answer_none"
<!--搜索结果值为空时,自定义出错信息中的提示文字颜色,不配置会走默认值-->
app:none_warn_text_color="#FFFF003B"
通过 Java 代码进行辅助定制
1. 定义方式1
private void initView() {
SearchView sv;
sv = (SearchView) findComponentById(ResourceTable.Id_searchView);//根据id获取控件
sv.Onsearch(getContext(),//获取所在能力的context
(ListContainer) findComponentById(ResourceTable.Id_ListContainer),//根据id获取并绑定结果列表展示控件
sv,//根据id绑定控件
findComponentById(ResourceTable.Id_emptyView),//根据id获取并绑定背景展示控件
(com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar),//根据id获取并绑定背景Loading加载动画控件
getSearch(),//传入搜索的数据
getSuggection(),//传入搜索建议的数据,如果不配置这个,则不会自带搜索建议
true);//是否开启搜索建议
}
//注意:搜索建议如果无需开启,可以不配置最后2项;如开启搜索建议,倒数第2项也可有可无
private List<SRContactor> getSearch(){
List<SRContactor> list = new ArrayList<>();
list.add(new SRContactor("zhtzx5", "clsths2"));//支持只传标题、信息,此时后面4个按钮默认不显示
list.add(new SRContactor("zhng", "cl1", null, ",2u", "3g", "7n7"));//支持传null,此时传null的将不会显示
list.add(new SRContactor("zhxcl5", null));//支持只传标题,同时传null,此时后面4个按钮和信息不显示
//TODO:注意:第一个不可为null
list.add(new SRContactor("zhags", "clhhs1", "1操", "2", "3码", "47"));//支持传入全部信息
return list;
}
private List<SHistoryContactor> getSuggection() {
List<SHistoryContactor> list = new ArrayList<>();
list.add(new SHistoryContactor("小草林", ResourceTable.Media_ic_history_black_24dp, -3));//这里-3代表根据默认图标或xml中配置的图标显示
list.add(new SHistoryContactor("TEST", ResourceTable.Media_ic_history_black_24dp, -1));//这里-1代表根据不显示图标
list.add(new SHistoryContactor("测试", -1, ResourceTable.Media_ic_close_black_24dp));
list.add(new SHistoryContactor("test"));//可以只配置建议信息,会自动根据默认图标或xml中配置的图标显示
return list;
}
2. 定义方式2
sv.setContext(getContext())//设置所在能力的context
.setRoundProgressBar((com.xcl.supersearch.RoundProgressBar) findComponentById(ResourceTable.Id_progressBar))//设置背景Loading加载动画控件
.setSearchView(sv)//设置搜索控件
.setSRListContainer(getSearch())//传入搜索的数据
.setSuggestionisShow(true)//设置是否开启搜索建议
.setSuggestionList(getSuggection())//设置搜索建议的数据
.setBackComponent(findComponentById(ResourceTable.Id_emptyView))//设置背景展示控件
.setListContainer((ListContainer) findComponentById(ResourceTable.Id_ListContainer))//设置结果列表展示控件
.Builder();//执行构造
-----------------------------一下方法2种构造均一样-----------------------------------
sv.setCustomListener(new SearchView.CustomListener() {
@Override
public void onFilter(String filter) {
//TODO:右上角的按钮事件
}
});
sv.setBt1Listener(new SearchView.Bt1Listener() {
@Override
public void onbT1(int position) {
Utils.error(label,"点击了按钮1,其的行号为:"+position+1);
//TODO:一行列表第一个的按钮事件
}
});
//依次类推,此处省略其他3个按钮事件
sv.setBackClickListener(new SearchView.BackClickListener() {
@Override
public void onBackClick() {
terminate();
//TODO:左上角的按钮事件
}
});
sv.setNullWarnListener(new SearchView.NullWarnListener(){
@Override
public void onNullError() {
Utils.error(label, "空搜索警告1");
//TODO:支持自定义空搜索警告
}
});
sv.setNoneWarnListener(new SearchView.NoneWarnListener(){
@Override
public void onNullWarn() {
Utils.error(label, "空结果警告1");
//TODO:支持自定义空结果警告
}
});
混淆配置
由于涉及自定义组件,请不要混淆本组件,否则会导致组件无法使用
-keep enum com.xcl.supersearch.**
-keep class com.xcl.supersearch.**{*;}
-keep class com.xcl.supersearch.**
-keepclassmembers enum com.xcl.supersearch.**{*;}
-keep interface com.xcl.supersearch.**
- 使用ImageTracerJava工具
参考项目地址: 我的另一个开源项目ImageTracerJava
- 在entry/src/test目录下的java文件中含有ImageTracerJava工具的使用示例,可以将图片转换成svg图片,再通过DevEco Studio自带的svg转xml即可将图片资源从media转到graphic中
- 使用前需先导入ImageTracerJava工具,并在build.gradle中添加依赖
allprojects {
repositories {
mavenCentral()
}
}
...
dependencies {
...
implementation 'top.xuegao-tzx:ImageTracerJava:1.1.4.516'
...
}
- 使用示例如下
// Options
HashMap<String,Float> options = new HashMap<String,Float>();
// Tracing
options.put("ltres",1f);
options.put("qtres",1f);
options.put("pathomit",8f);
// Color quantization
options.put("colorsampling",1f); // 1f means true ; 0f means false: starting with generated palette
options.put("numberofcolors",16f);
options.put("mincolorratio",0.02f);
options.put("colorquantcycles",3f);
// SVG rendering
options.put("scale",1f);
options.put("roundcoords",1f); // 1f means rounded to 1 decimal places, like 7.3 ; 3f means rounded to 3 places, like 7.356 ; etc.
options.put("lcpr",0f);
options.put("qcpr",0f);
options.put("desc",1f); // 1f means true ; 0f means false: SVG descriptions deactivated
options.put("viewbox",0f); // 1f means true ; 0f means false: fixed width and height
// Selective Gauss Blur
options.put("blurradius",0f); // 0f means deactivated; 1f .. 5f : blur with this radius
options.put("blurdelta",20f); // smaller than this RGB difference will be blurred
// Palette
// This is an example of a grayscale palette
// please note that signed byte values [ -128 .. 127 ] will be converted to [ 0 .. 255 ] in the getsvgstring function
//下方的两个数字16请参照实际图片动态调整以实现最佳效果
byte[][] palette = new byte[16][4];
for(int colorcnt=0; colorcnt < 16; colorcnt++){
palette[colorcnt][0] = (byte)( -128 + colorcnt * 32); // R
palette[colorcnt][1] = (byte)( -128 + colorcnt * 32); // G
palette[colorcnt][2] = (byte)( -128 + colorcnt * 32); // B
palette[colorcnt][3] = (byte)127; // A
}
ImageTracer.saveString(
"src\\main\\resources\\base\\media\\ic_close_black_24dp.svg" ,
ImageTracer.imageToSVG("src\\main\\resources\\base\\media\\ic_close_black_24dp.png",options,palette)
);
版本迭代
- v1.2.3.517
License(许可证)
作者:田梓萱 SuperSearch 在 AGPL V3.0 License 下获得许可