博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义SearchView实现即时查询
阅读量:5878 次
发布时间:2019-06-19

本文共 4815 字,大约阅读时间需要 16 分钟。

1.效果图,输入关键字时会根据关键字改变而更新数据。

 

2.其布局文件和2个小图标del.png和searchview.png,布局文件如下:高度已固定为46dp。

       
     
     
    
  

3.SearchView的样式:圆角+描边

4.代码

import android.content.Context; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import java.util.Timer; import java.util.TimerTask; /**  * Created by guoxw on 2017/6/26.  */ public class MySearchView extends LinearLayout implements TextWatcher, View.OnClickListener{
/** * 两个变量,用来判断输入间隔时间,大于1000ms,则提交数据,自动搜索条件 * times1 获取文本变化的时间 * times2 不断获取当前时间 */ long times1; long times2; private static final String TAG = "MySearchView1"; private EditText editText; private Button button_clear; String str; public MyOnQueryTextListener onQueryTextListener; public void setSearchViewListener(MyOnQueryTextListener onQueryTextListener){
this.onQueryTextListener=onQueryTextListener; } public MySearchView(Context context, AttributeSet attrs) {
super(context,attrs); LayoutInflater.from(context).inflate(R.layout.mysearchview,this,true); timer.schedule(timerTask,0,100); editText=(EditText) findViewById(R.id.et_search); button_clear=(Button)findViewById(R.id.bt_clear); button_clear.setVisibility(GONE); editText.addTextChangedListener(this); /*** del图片,清空输入内容*/ button_clear.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
editText.getText().clear(); } }); editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
// i== EditorInfo.IME_ACTION_SEND||(keyEvent!=null&&keyEvent.getKeyCode()== KeyEvent.KEYCODE_ENTER) /*** 监听的是出现搜索键,在up后进行提交事件**/ if((keyEvent!=null&&keyEvent.getKeyCode()== KeyEvent.KEYCODE_ENTER)){
switch(keyEvent.getAction()){
case KeyEvent.ACTION_UP: onQueryTextListener.MyonQueryTextSubmit(textView.getText().toString()); return true; default: return true; } } return false; } }); } @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
} /*** 监听内容变化,为空时不显示del图片*/ @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(charSequence!=null){
button_clear.setVisibility(View.VISIBLE); } else if(charSequence==null){
button_clear.setVisibility(View.GONE); } } @Override public void afterTextChanged(Editable editable) {
str=editable.toString(); times1= System.currentTimeMillis(); } @Override public void onClick(View view) {
} /** * 实现MySearcgView 的监听事件 */ public interface MyOnQueryTextListener{
void MyonQueryTextChange(String value); void MyonQueryTextSubmit(String value); } Timer timer=new Timer(); TimerTask timerTask=new TimerTask() {
@Override public void run() {
times2= System.currentTimeMillis(); /** * 超过800ms没有文字变化,则认为输入完成,开始自动搜索。 */ if(times2-times1>800&&times1!=0){
Log.d(TAG, "run: "+"监听超时"); times1=0; onQueryTextListener.MyonQueryTextChange(""+str); } } }; }
 

5.使用

searchView_record = (MySearchView) view.findViewById(R.id.searchView_record);        searchView_record.clearFocus();               searchView_record.setSearchViewListener(new MySearchView.MyOnQueryTextListener() {            @Override            public void MyonQueryTextChange(String value) {
        /** 自动搜索的处理**/ } @Override public void MyonQueryTextSubmit(String value) {
        /*** 点击提交时的处理**/ } });

 6.Code  .mywiodows.zip

链接: https://pan.baidu.com/s/1kVyzNYR 密码: qrnm

 

转载于:https://www.cnblogs.com/galibujianbusana/p/7661782.html

你可能感兴趣的文章
/proc/filesystems各字段含义
查看>>
Fabric密码保存
查看>>
guice基本使用,三种注入方式(二)
查看>>
Android Weekly Notes Issue #235
查看>>
ssh 连接缓慢解决方法
查看>>
【转】Hibernate系列学习之(二) 多对一、一对一、一对多、多对多的配置方法...
查看>>
杭电OJ(HDU)-ACMSteps-Chapter Three-《FatMouse' Trade》《今年暑假不AC》《排名》《开门人和关门人》...
查看>>
关于javaSocket中 Software caused connection abort: recv failed问题
查看>>
【翻译自mos文章】当并行事务恢复进程在执行时,禁用并行事务恢复的方法
查看>>
VUE -- 如何快速的写出一个Vue的icon组件?
查看>>
31.Node.js 常用工具 util
查看>>
服务器的svnserver修改密码
查看>>
利用 fdisk进行分区
查看>>
WPF 实现窗体拖动
查看>>
来自维基百科程序员Brandon Harris
查看>>
NULL不是数值
查看>>
CentOS 5 全功能WWW服务器搭建全教程
查看>>
30个优秀的后台管理界面设计案例分享
查看>>
scala111
查看>>
模块化服务规范——OSGI
查看>>