美文网首页Android问题解决方案积累
EditText控制DrawableRight的显示或隐藏,删除

EditText控制DrawableRight的显示或隐藏,删除

作者: 我在Bug的尽头等你 | 来源:发表于2020-06-12 17:46 被阅读0次

先上图:

没有输入内容时 输入内容后

两个功能

  • 功能一:监听EditText输入框的内容变化,有内容时,DrawableRight显示出来,没有内容时,DrawableRight隐藏
  • 功能二:当DrawableRight显示时,点击drawable,输入框内容清空,drawable隐藏

下面是代码实现:

两个方法都在页面视图初始化时调用即可

功能一:代码实现

 /**
     * 设置一个editText的右边的drawable的监听
     * @param editText  
      * Todo:传入你自己的edittext实例,另外,reset_delete_icon图片资源文件换成自己的
     */
    private void setAddTextChangeListener(final EditText editText) {
        final Drawable[] mDrawableRight = new Drawable[1];
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (!TextUtils.isEmpty(s)){
                    // 初始化DrawableRight
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        mDrawableRight[0] = getResources().getDrawable(R.drawable.reset_delete_icon, null);
                    } else {
                        mDrawableRight[0] = getResources().getDrawable(R.drawable.reset_delete_icon);
                    }
                    // 设置Drawable大小和位置
                    mDrawableRight[0].setBounds(0, 0, mDrawableRight[0].getIntrinsicWidth(), mDrawableRight[0].getIntrinsicHeight());
                    // 将其添加到控件上
                    editText.setCompoundDrawables(editText.getCompoundDrawables()[0], editText.getCompoundDrawables()[1], mDrawableRight[0], editText.getCompoundDrawables()[3]);
                }else {
                    Drawable drawable = editText.getCompoundDrawables()[2];
                    //如果右边没有图片,不再处理
                    if (drawable == null)
                        return ;
//                  去掉相应编辑框右边的图片功能,需要时可以放开注释
                    editText.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }

功能二代码实现

/**
     * 设置编辑框右边图片的点击事件
     *
     * @param etObject EditText对象
     */
    @SuppressLint("ClickableViewAccessibility")
    private void setEtRightDrawableClick(final EditText etObject) {
        etObject.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // et.getCompoundDrawables()得到一个长度为4的数组,分别表示左右上下四张图片
                Drawable drawable = etObject.getCompoundDrawables()[2];
                //如果右边没有图片,不再处理
                if (drawable == null)
                    return false;
                //如果不是按下事件,不再处理
                if (event.getAction() != MotionEvent.ACTION_UP)
                    return false;
                if (event.getX() > etObject.getWidth()
                        - etObject.getPaddingRight()
                        - drawable.getIntrinsicWidth()) {
                    etObject.setText("");
//                    去掉相应编辑框右边的图片功能,需要时可以放开注释
                    etObject.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0);
                }
                return false;
            }
        });
    }

相关文章

网友评论

    本文标题:EditText控制DrawableRight的显示或隐藏,删除

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