怎么处理edittext中的drawable点击事件?

我在EditText里的右边添加一个图片:
  1. <EditText
  2.   android:id="@+id/txtsearch"
  3.   ...
  4.   android:layout_gravity="center_vertical"
  5.   android:background="@layout/shape"
  6.   android:hint="Enter place,city,state"
  7.   android:drawableRight="@drawable/cross" />
复制代码

想用户点击这个嵌入的图片的时候能够清楚edittext!how?


import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.EditText;


public class CustomEditText extends EditText
{
    private Drawable dRight;
    private Rect rBounds;


    public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public CustomEditText(Context context) {
        super(context);
    }


    @Override
    public void setCompoundDrawables(Drawable left, Drawable top,
            Drawable right, Drawable bottom)
    {
        if(right !=null)
        {
            dRight = right;
        }
        super.setCompoundDrawables(left, top, right, bottom);
    }


    @Override
    public boolean onTouchEvent(MotionEvent event)
    {


        if(event.getAction() == MotionEvent.ACTION_UP && dRight!=null)
        {
            rBounds = dRight.getBounds();
            final int x = (int)event.getX();
            final int y = (int)event.getY();
            //System.out.println("x:/y: "+x+"/"+y);
            //System.out.println("bounds: "+bounds.left+"/"+bounds.right+"/"+bounds.top+"/"+bounds.bottom);
            //check to make sure the touch event was within the bounds of the drawable
            if(x>=(this.getRight()-rBounds.width()) && x<=(this.getRight()-this.getPaddingRight())
                    && y>=this.getPaddingTop() && y<=(this.getHeight()-this.getPaddingBottom()))
            {
                //System.out.println("touch");
                this.setText("");
                event.setAction(MotionEvent.ACTION_CANCEL);//use this to prevent the keyboard from coming up
            }
        }
        return super.onTouchEvent(event);
    }


    @Override
    protected void finalize() throws Throwable
    {
        dRight = null;
        rBounds = null;
        super.finalize();
    }
}


xml文件

<com.example.CustomEditText
  android:id="@+id/txtsearch"
  ...
  android:layout_gravity="center_vertical"
  android:background="@layout/shape"
  android:hint="Enter place,city,state"
  android:drawableRight="@drawable/cross"></com.example.CustomEditText>


activity中

CustomEditText et = (CustomEditText)this.findViewById(R.id.txtsearch);


在这里我发现要在activity里面获取到图片点击事件还不行,这种方法只能在EditText这个类文件获取点击事件

后面才想到可以通过handler从editText类文件中发送消息回去给activity,然后就可以实现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值