Android 设置EditText的DrawableRight和DrawableLeft 的通用点击事件

在我们进行Android开发的时候,经常会遇到需要给Drawable设置点击的时候,特别是在登录界面清除密码框的时候,但是Drawable并不支持点击事件监听。所以我们需要重写EditText控件

重写的控件:

package com.lb.frame.views;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;

/**
 * Created by libin on 2016/11/18.
 */

public class AddAndSubEditText extends EditText {

    private OnDrawableLeftListener mLeftListener;
    private OnDrawableRightListener mRightListener;
    private OnDrawableListener drawableListener;
    final int DRAWABLE_LEFT = 0;
    final int DRAWABLE_TOP = 1;
    final int DRAWABLE_RIGHT = 2;
    final int DRAWABLE_BOTTOM = 3;

    @SuppressLint("NewApi")
    public AddAndSubEditText(Context context, AttributeSet attrs, int defStyleAttr,
                             int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    public AddAndSubEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public AddAndSubEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AddAndSubEditText(Context context) {
        super(context);
    }

    public void setOnDrawableLeftListener(OnDrawableLeftListener listener) {
        this.mLeftListener = listener;
    }

    public void setOnDrawableRightListener(OnDrawableRightListener listener) {
        this.mRightListener = listener;
    }

    public void setOnDrawableClickListener(OnDrawableListener listener) {
        this.drawableListener = listener;
    }

    public interface OnDrawableListener {
        void onDrawableLeftClick(View view);

        void onDrawableRightClick(View view);
    }

    public interface OnDrawableLeftListener {
        void onDrawableLeftClick(View view);
    }

    public interface OnDrawableRightListener {
        void onDrawableRightClick(View view);
    }

    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_UP:
                if (mRightListener != null) {
                    Drawable drawableRight = getCompoundDrawables()[DRAWABLE_RIGHT];
                    if (drawableRight != null && event.getRawX() >= (getRight() - drawableRight.getBounds().width())) {
                        mRightListener.onDrawableRightClick(this);
                        return true;
                    }
                }
                if (drawableListener != null) {
                    Drawable drawableRight = getCompoundDrawables()[DRAWABLE_RIGHT];
                    if (drawableRight != null && event.getRawX() >= (getRight() - drawableRight.getBounds().width())) {
                        drawableListener.onDrawableRightClick(this);
                        return true;
                    }
                    Drawable drawableLeft = getCompoundDrawables()[DRAWABLE_LEFT];
                    if (drawableLeft != null && event.getRawX() <= (getLeft() + drawableLeft.getBounds().width())) {
                        drawableListener.onDrawableLeftClick(this);
                        return true;
                    }
                }
                if (mLeftListener != null) {
                    Drawable drawableLeft = getCompoundDrawables()[DRAWABLE_LEFT];
                    if (drawableLeft != null && event.getRawX() <= (getLeft() + drawableLeft.getBounds().width())) {
                        mLeftListener.onDrawableLeftClick(this);
                        return true;
                    }
                }
                break;
        }

        return super.onTouchEvent(event);
    }
}

注意:如果在重写控件时,继承的EditText报错,提示你需要使用v7支持包,这个时候我们可以忽略,直接使用即可

使用:

people_num_et.setOnDrawableClickListener(new AddAndSubEditText.OnDrawableListener() {
    @Override
    public void onDrawableLeftClick(View view) {
        if (peopleNum > 1) {
            people_num_et.setText(String.valueOf(--peopleNum));
        } else {
            T.show("至少1人");
        }
    }

    @Override
    public void onDrawableRightClick(View view) {
        if (peopleNum < 3) {
            people_num_et.setText(String.valueOf(++peopleNum));
        } else {
            T.show("最多3人");
        }
    }
});
people_num_et.setOnDrawableLeftListener(new AddAndSubEditText.OnDrawableLeftListener() {
    @Override
    public void onDrawableLeftClick(View view) {
        if (peopleNum > 0) {
            people_num_et.setText(--peopleNum);
        }
    }
});
people_num_et.setOnDrawableRightListener(new AddAndSubEditText.OnDrawableRightListener() {
    @Override
    public void onDrawableRightClick(View view) {
        if (peopleNum < 3) {
            people_num_et.setText(++peopleNum);
        } else {
            T.show("最多3人");
        }
    }
});

本文转载自:http://blog.csdn.net/u010514478/article/details/53217216并修改

猜你喜欢

转载自blog.csdn.net/zhangkaidsy/article/details/77852203
今日推荐