EditText添加drawableXXX的点击事件

来源:互联网 发布:大数据平台建设方案 编辑:程序博客网 时间:2024/05/17 05:51
  • EditText提供了drawableXXX属性来设置控件的个位置的图片显示,但是没有提供响应的点击事件处理。
  • 首先要考虑的问题是如何在java代码中获取点击的范围是否在图标范围内。getTotalPaddingXXX方法提供了包含drawableXXX在内的距离,而getPaddingXXX返回视图距响应方向的距离。所以就可以判断是否在图标内点击。
  • boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())&& (event.getX() < ((getWidth() - getPaddingRight())));
  • 所以重写onTouchEvent方法,我需要根据当前输入类型来判断是否需要明暗文切换
  • public boolean onTouchEvent(MotionEvent event) {    if (event.getAction() == MotionEvent.ACTION_UP) {        if (getCompoundDrawables()[2] != null) {            boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())                    && (event.getX() < ((getWidth() - getPaddingRight())));            if (touchable) {                if(getInputType()==InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD+InputType.TYPE_CLASS_TEXT){                    setCompoundDrawables(null, null, mRightDrawableSelect, null);                    setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);                    //view.setText(view.getText().toString());                }else{                    setCompoundDrawables(null, null, mRightDrawableUnSelect, null);                    setInputType(InputType.TYPE_CLASS_TEXT |InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);                }                setSelection(getText().length());            }        }    }    return super.onTouchEvent(event);}
  • 最好还是通过接口的形式让外部传入相应的点击事件。
0 0