# Search_Layout
**Repository Path**: neuliying/Search_Layout
## Basic Information
- **Project Name**: Search_Layout
- **Description**: 一款封装了 历史搜索记录功能 & 样式 的Android自定义搜索框(改良版)
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2018-11-11
- **Last Updated**: 2026-06-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Search View

- 原作者:Carson_Ho
- 修改者:liying2008(duduhuo)
**注:关于该开源项目的意见 & 建议可在 Issue 上提出。欢迎 Star !**
## 1. 简介
一款**封装了 历史搜索记录功能 & 样式** 的 `Android` 自定义搜索框。

## 2. 功能介绍
### 2.1 需求场景
1. **主要:** 对某类事物进行精确搜索;
2. **次要:** 降低二次搜索的操作成本。
### 2.2 功能需求
- 功能列表
| 需求场景 |
功能 |
描述 |
优先级 |
| (主要)对某类事物进行精确搜索 |
关键字搜索 |
根据用户的关键字输入进行数据库查找 |
P1 |
| (次要)降低二次搜索的操作成本 |
实时显示历史搜索记录 |
包括:最近搜索记录 & 相似搜索记录(根据用户输入) |
P2 |
| 保存历史搜索记录 |
将用户的搜索字段进行保存(以点击搜索按钮为准) |
P3 |
| 删除历史搜索记录 |
将数据库中保存的历史搜索记录删除或清空 |
P4 |
| 一键删除输入搜索关键词 |
将用户当前输入的搜索关键词清空 |
P5 |
- 功能原型

## 3. 特点
### 3.1 功能实用
- 该搜索框开源库具备除了历史搜索记录功能外,还具备一般的搜索框功能(如一键清空搜索框内容等等)
- 封装了 **常见的搜索框样式**(如图标、字体、背景等等),使用起来更加方便
- 支持多个搜索框之间历史记录数据隔离
### 3.2 使用简单
仅需要简单的 `xml` 属性配置
> 下面1节会详细介绍其使用方法
### 3.3 二次开发成本低
- 本项目已在 `Github` 上开源:[地址:SearchLayout](https://github.com/liying2008/Search_Layout)
- 具备详细的源码分析文档:请看原作者 Carson_Ho 的文章 [Android开源库:手把手教你实现一个简单好用的搜索框(含历史搜索记录)](http://www.jianshu.com/p/590f00025de3)
# 4. 具体使用
## 方式1:直接使用控件 `SearchView`
### 步骤1:引入控件库
通过 `Gradle` 引入依赖
*build.gradle*
```gradle
dependencies {
implementation("cc.duduhuo:search-view:2.0.0")
}
```
### 步骤2:设置搜索框样式
- 自定义属性列表
**1. color / background**
| 属性 | 描述 | 类型 | 默认值(明亮主题) | 默认值(黑暗主题) |
|:--------------------------:|:----------:|:---------:|:-----------------------------------:|:-----------------------------------:|
| searchTextColor | 搜索字体颜色 | color | #9B9B9B | #E1E1E1 |
| searchTextBackground | 搜索编辑框背景 | reference | 0 | 0 |
| searchBlockColor | 搜索控件背景颜色 | color | #FFFFFF | #121212 |
| searchBlockBackground | 搜索控件背景 | reference | - | - |
| searchButtonBackground | 搜索按钮背景 | reference | 0 | 0 |
| searchButtonIconColor | 搜索按钮图标颜色 | color | #878787 | #A0A0A0 |
| iconColor | 所有图标的颜色 | color | #878787 | #A0A0A0 |
| backIconColor | 返回图标的颜色 | color | #878787 | #A0A0A0 |
| searchIconColor | 搜索图标的颜色 | color | #878787 | #A0A0A0 |
| deleteIconColor | 删除图标的颜色 | color | #878787 | #A0A0A0 |
| clearHistoryTextColor | 清除历史记录文字颜色 | color | #606060 | #B0B0B0 |
| clearHistoryTextBackground | 清除历史记录文字背景 | reference | pressed: #ececec
normal: #e2e2e2 | pressed: #3D3D3D
normal: #2C2C2C |
**2. string**
| 属性 | 描述 | 类型 | 默认值(中文) | 默认值(英文) |
|:----------------:|:------------:|:------:|:-------:|:---------------------:|
| searchTextHint | 搜索框编辑框提示内容 | string | 输入查询关键字 | Enter search keywords |
| clearHistoryText | 清除历史记录文字 | string | 清空搜索历史 | Clear Search History |
| tag | 数据标签(用于数据隔离) | string | `null` | `null` |
**3. 其他**
| 属性 | 描述 | 类型 | 默认值 |
|:--------------------:|:----------:|:---------:|:-----:|
| searchTextSize | 搜索字体大小 | dimension | 14sp |
| searchBlockHeight | 搜索控件高度 | dimension | 46dp |
| searchButtonVisible | 搜索按钮是否可见 | boolean | true |
| searchIconVisible | 搜索图标是否可见 | boolean | false |
| clearHistoryTextSize | 清除历史记录文字大小 | dimension | 14sp |
- 使用示例
在 layout 文件中使用,如:
```xml
```
### 步骤3:设置点击键盘上的搜索按键 & 返回按键后的操作
```java
private SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
// 搜索框组件
searchView = findViewById(R.id.search_view);
// 是否在点击历史条目后启动搜索
searchView.startSearchWhenHistoryItemClick = true;
// 设置点击搜索按键后的操作(通过回调接口)
// 参数 = 搜索框输入的内容
searchView.setOnSearchListener(new OnSearchListener() {
@Override
public void onSearch(String keyword) {
Toast.makeText(SearchViewDemoActivity.this, "搜索关键词:" + keyword, Toast.LENGTH_SHORT).show();
// 也可通过 getSearchText() 方法获取搜索框中的内容
String searchText = searchView.getSearchText();
System.out.println(searchText);
// 如果需要自定义搜索按钮,可以在按钮的click事件中调用 startSearch() 方法。
// searchView.startSearch();
}
});
// 设置点击返回按键后的操作(通过回调接口)
searchView.setOnBackListener(new OnBackListener() {
@Override
public void onBack() {
finish();
}
});
}
```
## 方式2:使用控件 `SearchFragment`
### 步骤1:实例化 `SearchFragment`
```java
SearchFragment searchFragment = SearchFragment.newInstance();
```
### 步骤2:设置搜索回调的监听
```java
searchFragment.setOnSearchListener(new OnSearchListener() {
@Override
public void onSearch(String keyword) {
Toast.makeText(SearchFragmentDemoActivity.this, "搜索关键词:" + keyword, Toast.LENGTH_SHORT).show();
}
});
```
### 步骤3:显示 `SearchFragment`
```java
searchFragment.show(getSupportFragmentManager(), SearchFragment.TAG);
```
# 5. 完整Demo地址
https://github.com/liying2008/Search_Layout/tree/master/app
# 6. 开源协议
[MIT](LICENSE)
# 7. 贡献代码
- 具体请看:[贡献代码说明](CONTRIBUTING.md)
- 关于该开源项目的意见 & 建议可在 `Issue` 上提出。欢迎 Star & Fork !
# 8. 版本说明
[版本更新说明](CHANGELOG.md)
# 关于原作者
- ID:Carson_Ho
- 简介:CSDN签约作者、简书推荐作者、稀土掘金专栏作者
- E - mail:[carson.ho@foxmail.com](mailto:carson.ho@foxmail.com)
- Github:[https://github.com/Carson-Ho](https://github.com/Carson-Ho)
- CSDN:[http://blog.csdn.net/carson_ho](http://blog.csdn.net/carson_ho)
- 简书:[http://www.jianshu.com/u/383970bef0a0](http://www.jianshu.com/u/383970bef0a0)
- 稀土掘金:[https://juejin.im/user/58d4d9781b69e6006ba65edc](https://juejin.im/user/58d4d9781b69e6006ba65edc)
# 关于修改者
- ID:liying2008
- E - mail:[liruoer2008@yeah.net](mailto:liruoer2008@yeah.net)
- Github:[https://github.com/liying2008](https://github.com/liying2008)