美文网首页开源工具技巧
DelEditText 带删除的搜索框

DelEditText 带删除的搜索框

作者: 颤抖的闪电 | 来源:发表于2017-10-19 14:07 被阅读0次

前言:带删除按钮的搜索框,代码乃网上翻的。核心类如下。

/**
 * Created by coder-pig on 2015/7/16 0016.
 */
@SuppressLint("AppCompatCustomView")
public class DelEditText extends EditText {

    private Drawable imgClear;
    private Context mContext;

    DelEditTextChangedListener mDelEditTextChangedListener;

    public DelEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        init();
    }

    private void init() {
        // imgClear =
        // mContext.getResources().getDrawable(R.drawable.delete_gray);
        imgClear = mContext.getResources().getDrawable(R.drawable.item_close_button);
        addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                if (mDelEditTextChangedListener != null) {
                    mDelEditTextChangedListener.beforeTextChanged(s, start, count, after);
                }
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (mDelEditTextChangedListener != null) {
                    mDelEditTextChangedListener.onTextChanged(s, start, before, count);
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {
                setDrawable();
                if (mDelEditTextChangedListener != null) {
                    mDelEditTextChangedListener.afterTextChanged(editable);
                }
            }
        });
    }

    // 绘制删除图片
    private void setDrawable() {
        if (length() < 1)
            setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
        else
            setCompoundDrawablesWithIntrinsicBounds(null, null, imgClear, null);
    }

    // 当触摸范围在右侧时,触发删除方法,隐藏叉叉
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (imgClear != 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 - 100;
            if (rect.contains(eventX, eventY))
                setText("");
        }
        return super.onTouchEvent(event);
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }

    public interface DelEditTextChangedListener {
        public void beforeTextChanged(CharSequence s, int start, int count, int after);

        public void onTextChanged(CharSequence s, int start, int before, int count);

        public void afterTextChanged(Editable editable);
    }

    public DelEditTextChangedListener getDelEditTextChangedListener() {
        return mDelEditTextChangedListener;
    }

    public void setDelEditTextChangedListener(DelEditTextChangedListener l) {
        this.mDelEditTextChangedListener = l;
    }

}

使用方法:
1,在xml中引用如下:

<com.csair.appmodule.view.DelEditText
            android:id="@+id/et_search"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="搜索" />

2、在代码中引用如下:

private DelEditText etSearch;
etSearch = (DelEditText) findViewById(R.id.et_search);
String keyWord;//搜索关键词
etSearch.setDelEditTextChangedListener(new DelEditText.DelEditTextChangedListener() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                if (s.toString().trim().equals(keyWord)) {
                    return;
                } else {
                    keyWord = s.toString().trim();
                    if (keyWord.isEmpty() || keyWord == null) {
                        showAll();
                    } else {
                        doSearch(keyWord);//搜索动作
                    }
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable editable) {
                // TODO Auto-generated method stub
            }
        });

相关文章

  • DelEditText 带删除的搜索框

    前言:带删除按钮的搜索框,代码乃网上翻的。核心类如下。 使用方法:1,在xml中引用如下: 2、在代码中引用如下:

  • 带删除按钮的 EditText

    一个带删除按钮的 EditText 在各种 APP 中随处可见,比如,搜索框、登录时用户名与密码的输入框等等。在没...

  • 搜索框实现规则

    1、用户点击搜索框 2、当有关键字输入时,同时点亮删除按钮(如图3),删除搜索框原有的提示内容(有个别平台有关键词...

  • 缓存数据框

    搜索列表框 + 操作列表数据源添加数据:1.添加搜索框输入数据2.搜索不到列表项才能添加3.删除搜索到的选中列表项

  • 调用键盘搜索

    function ngEnter() { //删除搜索框的历史记录return function(scope, e...

  • 带搜索框的列表实现

  • 360搜索下拉框为您推荐相关搜索词删除方法大揭秘

    360搜索下拉框为您推荐相关搜索词删除方法大揭秘 唠叨在前边 做搜索营销推广的,多渠道才是王道,只靠单一搜索引擎肯...

  • Combox

    js实现带搜索功能的下拉框实时搜索实时匹配http://m.jb51.net/article/42813.htm

  • Android SearchView 详解

    很早玩搜索都是自定义一个搜索框的drawable 图如下 然后写一个 EditText,放个删除的图 逻辑写在ed...

  • Internet resources 4

    下一步,在搜索框里打上“美国教育体罚”,点击“谷歌搜索”。请记住,由于新的信息不断在被网页增加和删除,所以...

网友评论

    本文标题:DelEditText 带删除的搜索框

    本文链接:https://www.haomeiwen.com/subject/xzpuuxtx.html