当前位置: 代码迷 >> Android >> [Android]文本框兑现搜索和清空效果
  详细解决方案

[Android]文本框兑现搜索和清空效果

热度:83   发布时间:2016-05-01 17:29:04.0
[Android]文本框实现搜索和清空效果

[Android]文本框实现搜索和清空效果

?

前言

  本文实现的效果:文本框输入为空时显示输入的图标;不为空时显示清空的图标,此时点击清空图标能清空文本框内输入文字。

?

声明

  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.com

    农民伯伯: http://over140.cnblogs.com?

?

正文

  一、实现效果

    

       

?

  二、实现代码

    监听输入

复制代码
????/**
?????*?动态搜索
?????
*/
????
private?TextWatcher?tbxSearch_TextChanged?=?new?TextWatcher()?{

????????
//缓存上一次文本框内是否为空
????????private?boolean?isnull?=?true;

[email protected]
????????
public?void?afterTextChanged(Editable?s)?{
????????????
if?(TextUtils.isEmpty(s))?{
????????????????
if?(!isnull)?{
????????????????????mSearchView.setCompoundDrawablesWithIntrinsicBounds(
null,
????????????????????????????
null,?mIconSearchDefault,?null);
????????????????????isnull?
=?true;
????????????????}
????????????}?
else?{
????????????????
if?(isnull)?{
????????????????????mSearchView.setCompoundDrawablesWithIntrinsicBounds(
null,
????????????????????????????
null,?mIconSearchClear,?null);
????????????????????isnull?
=?false;
????????????????}
????????????}
????????}

[email protected]
????????
public?void?beforeTextChanged(CharSequence?s,?int?start,?int?count,
????????????????
int?after)?{
????????}

????????
/**
?????????*?随着文本框内容改变动态改变列表内容
?????????
*/
[email protected]
????????
public?void?onTextChanged(CharSequence?s,?int?start,?int?before,
????????????????
int?count)?{
????????????
????????}
????};
复制代码

?    触摸事件

复制代码
????private?OnTouchListener?txtSearch_OnTouch?=?new?OnTouchListener()?{
[email protected]
????????
public?boolean?onTouch(View?v,?MotionEvent?event)?{
????????????
switch?(event.getAction())?{
????????????
case?MotionEvent.ACTION_UP:
????????????????
int?curX?=?(int)?event.getX();
????????????????
if?(curX?>?v.getWidth()?-?38
????????????????????????
&&?!TextUtils.isEmpty(mSearchView.getText()))?{
????????????????????mSearchView.setText(
"");
????????????????????
int?cacheInputType?=?mSearchView.getInputType();//?backup??the?input?type
????????????????????mSearchView.setInputType(InputType.TYPE_NULL);//?disable?soft?input
????????????????????mSearchView.onTouchEvent(event);//?call?native?handler
????????????????????mSearchView.setInputType(cacheInputType);//?restore?input??type
????????????????????return?true;//?consume?touch?even
????????????????}
????????????????
break;
????????????}
????????????
return?false;
????????}
????};
复制代码

    绑定事件

复制代码
????private?Drawable?mIconSearchDefault;?//?搜索文本框默认图标
????private?Drawable?mIconSearchClear;?//?搜索文本框清除文本内容图标

[email protected]
????
protected?void?onCreate(Bundle?savedInstanceState)?{
????????
super.onCreate(savedInstanceState);
????????setContentView(R.layout.main)
????????
????????
final?Resources?res?=?getResources();
????????mIconSearchDefault?
=?res.getDrawable(R.drawable.txt_search_default);
????????mIconSearchClear?
=?res.getDrawable(R.drawable.txt_search_clear);
????????
????????mSearchView?
=?(EditText)?findViewById(R.id.txtSearch);
????????mSearchView.addTextChangedListener(tbxSearch_TextChanged);
????????mSearchView.setOnTouchListener(txtSearch_OnTouch);
????}
  代码说明:

      1. 为输入框绑定触摸事件(模拟点击事件捕捉)。通过监听点击区域判断是否点击清空图片,如果在该区域并且文本框不为空,则清空文本框。

      2. 为输入框绑定文本改变事件监听,根据内容改变动态设置图标显示。

      3. 维持清空操作后软键盘状态。

?

  三、参考

    1.? how to block virtual keyboard while clicking on edittext in android?

?

  四、小图标下载

      

    (右键另存为即可。)

?

结束

活用好每一个控件的属性、方法和事件能实现很多有意思的效果。欢迎大家交流。
  相关解决方案