一个简单的搜索输入框
来源:互联网 发布:html数据展示表格模板 编辑:程序博客网 时间:2024/05/22 16:44
今天我们来看一个简单的搜索输入框。
为了简单起见,直接继承EditTextView,重写构造方法,这里我们提供三个构造(参数分别为一个,两个,三个,通常提供前两个 就够了)。
public EditTextWithSearch(Context context) { super(context); mContext = context; init(); } public EditTextWithSearch(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; init(); } public EditTextWithSearch(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; init(); }
private void init() { searchImg = mContext.getResources().getDrawable(R.mipmap.nu_ic_search); setCompoundDrawablesWithIntrinsicBounds(null, null, searchImg, null); setBackgroundResource(R.drawable.nu_input_frame); setTextSize(16); LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 34); setLayoutParams(linearParams); setHintTextColor(Color.parseColor("#B6B6B6")); setSearch(); }
对于搜索行为,我们期望有两个地方可以出发,一是点击搜索图标,二是软键盘的回车键。
对于前者,重写onTouchEvent():
@Override public boolean onTouchEvent(MotionEvent event) { if (searchImg != null && event.getAction() == MotionEvent.ACTION_UP) { int eventX = (int) event.getRawX(); int eventY = (int) event.getRawY(); Rect rect = new Rect(); getGlobalVisibleRect(rect); rect.left = rect.right - 50; if (rect.contains(eventX, eventY) && searchListener != null) { searchListener.onSearch(getText().toString()); } } return super.onTouchEvent(event); }
我们知道,onTouchEvent()参数中的MotionEvent类包含了点击事件的相关信息,可以获取点击坐标及点击事件类型等,这里,我们通过设定触发搜索行为的条件为:点击坐标在规定视图范围内,这里我们通过getGlobalVisibleRect方法获取可视区域的视图,再限定rect大小,从而锁定搜索图标及周围区域。
对于后者,更改软键盘的回车键图标,并对其设置监听。
private void setSearch() { setInputType(InputType.TYPE_CLASS_TEXT); setImeOptions(EditorInfo.IME_ACTION_SEARCH); setImeActionLabel("搜索", getImeActionId()); setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER && searchListener != null) { searchListener.onSearch(getText().toString()); } return false; } }); }
最后,我们对外提供注册监听方法及接口原型。
public void setSearchListener(SearchListener searchListener) { this.searchListener = searchListener; } public interface SearchListener { void onSearch(String text); }
0 0
- 一个简单的搜索输入框
- 一个简单的ExtJS搜索建议框
- 一个简单的账号密码输入框
- 写一个简单的输入框
- 搜索框输入特殊字符后台的简单处理方式
- 简单搜索求输入数字的位置
- 一个最简单的基于Android SearchView的搜索框
- 用Vue.js实现一个简单的搜索框
- 一个简单的仿京东搜索框背景渐变
- iOS给键盘添加一个简单的输入框
- 一个简单的ComboBox模糊搜索类
- 一个简单的二叉搜索树实现
- 创建一个简单的输入表单
- 一个简单的IP地址输入控件
- ThinkPHP3.2.3---ajaxreturn的应用:一个在搜索框中输入,实时动态显示模糊搜索结果
- 下拉框内容太多,一个带搜索功能的下拉输入框实现
- 记简单的输入框输入密码
- 基于jquery的搜索框输入提示
- 判断一个类或实例是否继承自某类的python代码
- jstl/el表达式截取后台传入数据的长度
- hadoop之sqoop------>数据迁移工具
- Ubuntu14 搭建PHP工作环境
- VS2010 简单ATL COM开发(下)
- 一个简单的搜索输入框
- TR069协议
- 深入理解Java中的组合和继承
- ZGHKLMJD,ZGHKLMJD,ZGHKLMJD 骗子骗子骗子
- 产品设计必备干货:产品开发流程[完整版]
- accelio介绍和信息汇总
- Detect For Codeigniter 弥补CI对移动设备甄别的不足
- 1622-5 孔富晨 总结《2016年12月24日》 【连续第84天总结】
- Spring学习之旅(七) 使用属性文件