## SuperSearch
### 项目介绍
一个开源的ohos Java 库,旨在简化多终端搜索相关功能的实现。
### 功能列表
1. 支持模糊匹配以及精确匹配
2. 支持开启、关闭搜索记录
3. 自带搜索算法
4. 支持超多功能自定义
5. 代码高可扩展性
6. 支持多设备使用
7. 支持开箱即用
### 安装教程
- 方法一:
使用前需先导入SuperSearch依赖,并在所对应的模块build.gradle中添加依赖
```groovy
allprojects {
repositories {
mavenCentral()
}
}
...
dependencies {
...
implementation 'top.xuegao-tzx:SuperSearch:1.2.3.517'
...
}
```
- 方式二:
1. 下载模块代码添加到自己的工程
2. 关联使用
```
dependencies {
implementation project(":supersearch")
……
}
```
### 使用说明
#### - 添加SuperSearch
##### 1. 加载动画(一个加载中的圆圈)
```xml
app:round_progress_color="#FF82F8EF"
app:round_progress_with="5f"
```
##### 2. 搜索框
###### 通过 XML 进行定制
```xml
app:isDebugEnabled="true"
app:isWearable="true"
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"
app:delete_search_history="$graphic:ic_close"
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"
app:rightButton_Clear="$graphic:ic_close"
app:isrightButton_ClearEnabled="true"
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 代码进行辅助定制
```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 getSearch(){
List 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 getSuggection() {
List 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:支持自定义空结果警告
}
});
```
#### - 使用ImageTracerJava工具
> 参考项目地址: 我的另一个开源项目[ImageTracerJava](https://gitee.com/xuegao-tzx/ImageTracerJava)
1. 在entry/src/test目录下的java文件中含有ImageTracerJava工具的使用示例,可以将图片转换成svg图片,再通过DevEco Studio自带的svg转xml即可将图片资源从media转到graphic中
2. 使用前需先导入ImageTracerJava工具,并在build.gradle中添加依赖
```groovy
allprojects {
repositories {
mavenCentral()
}
}
...
dependencies {
...
implementation 'top.xuegao-tzx:ImageTracerJava:1.1.4.516'
...
}
```
3. 使用示例如下
```java
// Options
HashMap options = new HashMap();
// 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](https://www.gnu.org/licenses/agpl-3.0.txt) 下获得许可