zoukankan      html  css  js  c++  java
  • Android 实现的EditText响应drawableRight的点击事件

    1.自定义Edittext 实现右侧图标点击清空

    package com.dxw.live.view;
    
    import android.content.Context;
    import android.graphics.drawable.Drawable;
    import android.support.v7.widget.AppCompatEditText;
    import android.text.TextUtils;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    
    import com.dxw.live.R;
    
    public class RightPicClickEditText extends AppCompatEditText {
        private Drawable drawableRight;
    
        public RightPicClickEditText(Context context) {
            super(context);
            drawableRight = context.getResources().getDrawable(
                    R.mipmap.edit_close);
        }
    
        public RightPicClickEditText(Context context, AttributeSet attrs) {
            super(context, attrs);
            drawableRight = context.getResources().getDrawable(
                    R.mipmap.edit_close);
        }
    
        public RightPicClickEditText(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            drawableRight = context.getResources().getDrawable(
                    R.mipmap.edit_close);
        }
    
        @Override
        protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
            if (TextUtils.isEmpty(text)) {
                setCompoundDrawablesWithIntrinsicBounds(null,
                        null, null, null);
            } else {
                setCompoundDrawablesWithIntrinsicBounds(null,
                        null, drawableRight, null);
            }
            super.onTextChanged(text, start, lengthBefore, lengthAfter);
        }
    
        // 触摸事件
        // 判断DrawableLeft/DrawableRight是否被点击
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            // 触摸状态
            if (event.getAction() == MotionEvent.ACTION_UP) {
                // 监听DrawableLeft
    //            if (onDrawableRightListener != null) {
                    // 判断DrawableLeft是否被点击
                    Drawable drawableRight = getCompoundDrawables()[2];
                    // 当按下的位置 < 在EditText的到左边间距+图标的宽度+Padding
    //                if (drawableLeft != null && event.getRawX() 在EditText的到右边间距 - 图标的宽度 - Padding
                    if (drawableRight != null) {
                        setText("");
                        setCompoundDrawablesWithIntrinsicBounds(null,
                                null, null, null);
                        // 执行DrawableRight点击事件
    //                    onDrawableRightListener.onDrawableRightClick();
                    }
    //            }
            }
            return super.onTouchEvent(event);
        }
    
        // 定义一个DrawableLeft点击事件接口
        public interface OnDrawableLeftListener {
            void onDrawableLeftClick();
        }
    
        private OnDrawableLeftListener onDrawableLeftListener;
    
        public void setOnDrawableLeftListener(OnDrawableLeftListener onDrawableLeftListener) {
            this.onDrawableLeftListener = onDrawableLeftListener;
        }
    
        // 定义一个DrawableRight点击事件接口
        public interface OnDrawableRightListener {
            void onDrawableRightClick();
        }
    
        private OnDrawableRightListener onDrawableRightListener;
    
        public void setOnDrawableRightListener(OnDrawableRightListener onDrawableRightListener) {
            this.onDrawableRightListener = onDrawableRightListener;
        }
    }
  • 相关阅读:
    Windows DLL调用实例
    DLL头文件的格式和应用
    Strategy factory
    抽象数据类型(ADT)和面向对象编程(OOP)3.5 ADT和OOP中的等价性
    抽象数据类型(ADT)和面向对象编程(OOP)3.4 面向对象的编程
    抽象数据类型(ADT)和面向对象编程(OOP)3.3 抽象数据类型
    抽象数据类型(ADT)和面向对象编程(OOP)3.2规约
    抽象数据类型(ADT)和面向对象编程(OOP)3.1数据类型和类型检查
    软件构造 消息传递
    软件构造 并发3(线程安全性)----锁定和同步
  • 原文地址:https://www.cnblogs.com/huihuizhang/p/10849157.html
Copyright © 2011-2022 走看看