自定义带有删除标签的edittext

原创 2016年08月31日 14:48:51

有的时候整个人都在纠结,为什么要写博客呢,写博客有什么意思,反正没人看,再说了,那么简单的东西,别人肯定会了,我干嘛还继续在这里唠叨呢。后来看了郭霖大神,巫山老妖等的博客,发现,技术都是小东西积累起来的,打好了基础,才能有更长远的发展。同时也是自己技术的一个总结和沉淀,技术就在日积月累中成长了。
今天分享一个简单的自定义,学会自己写带删除按钮的edittext。在这个自定一面,主要就是注意以下几个问题,就很容易写出来了:
1、edittext的焦点问题,获取焦点的情况下判断内容的长度来控制删除按钮的隐现。
2、edittext的ontouch区域判断,根据按下抬手的响应区域来做删除按钮的响应判断。
3、监听edittext变化中,变化后长度来控制删除按钮的显示问题。
具体的实现步骤我们看代码:

/**
 * Created by vincent on 2016/8/29.
 */
public class DeleteEditext extends EditText implements  TextWatcher, View.OnFocusChangeListener {
    private Drawable myDrawable;//删除图标
    private boolean hasFoucs = false;//是否获取焦点
    public DeleteEditext(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

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

    public DeleteEditext(Context context) {
        super(context);
        init();
    }

    private void init() {
        //getCompoundDrawables 4个属性,左上右下 0-4
        myDrawable = getCompoundDrawables()[2];
        if (myDrawable == null){
            myDrawable = getResources().getDrawable(R.mipmap.clean);
        }
        //设置图标的大小
        myDrawable.setBounds(0,0,myDrawable.getIntrinsicWidth(),myDrawable.getIntrinsicHeight());
        //设置图片是否可见
        setPicVisible(hasFoucs);//初始不可见

        setOnFocusChangeListener(this);//设置焦点获取

        addTextChangedListener(this);//设置字符长度监听
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP)//如果是松手
        {
            boolean isDelete=  (event.getX()>getWidth()-getTotalPaddingRight())&&(event.getX()<getWidth()-getPaddingRight());
            if (isDelete){
                setText("");
            }
        }
        return super.onTouchEvent(event);
    }

    private void setPicVisible(boolean hasFoucs) {
       Drawable drawable = hasFoucs?myDrawable:null;
        setCompoundDrawables(getCompoundDrawables()[0],getCompoundDrawables()[1],drawable,getCompoundDrawables()[3]);
    }


    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable editable) {
        boolean isVisible = getText().toString().length()>0;
        setPicVisible(isVisible);
    }

    @Override
    public void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
      setPicVisible(text.length()>0);
    }

    @Override
    public void onFocusChange(View view, boolean b) {
        hasFoucs = b;
        if (hasFoucs){
            setPicVisible(getText().length()>0);
        }else {
            setPicVisible(false);
        }
    }
}

代码很简单,不到100行,这也是简单的自定义,所以以后在自定义中,掌握好ontouch的使用,以及对控件大小的判断和位置获取,实现起来还是比较容易的。

相关文章推荐

自定义带有删除功能的EditText

  • 2015年11月03日 10:51
  • 1.42MB
  • 下载

带有删除按钮,自动补全邮箱后缀的自定义EditText

package com.example.autocompletetextview;import android.content.Context; import android.graphics.dr...

Android自定义View带有删除按钮的EditText

MainActivity如下: [java] view plaincopy package cc.textview5;   import android.os.Bundle;  ...

自定义带有删除功能的EditText

实例:在登录,搜索等地方经常用到可以直接用这里写代码片
  • Adomner
  • Adomner
  • 2016年08月15日 21:34
  • 119

自定义带删除按钮的edittext

  • 2016年08月23日 20:46
  • 996KB
  • 下载

Android学习问题:关于AlertDialog中自定义布局带有的EditText无法弹出键盘

最近在用到AlertDialog的时候,自定义了其布局文件,其中带有EditText,但是发现在手机上使用的时候,点击EditText却没有弹出键盘,在网上搜索了下,看到有好几种解决方法,试过其中一些...
  • lc013
  • lc013
  • 2015年04月12日 13:01
  • 2639

自定义带删除EditText

  • 2015年09月01日 13:59
  • 1.28MB
  • 下载

android 自定义EditText,可删除

  • 2016年12月07日 17:43
  • 6.66MB
  • 下载

Android 自定义带有清除按钮的Edittext

在应用中为了增加用户体验,方便用户操作,一般会需要一个带有清除按钮的输入框,废话不多说,直接上代码,也是自己在练习自定义view的过程吧,记录下 import android.annotation....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义带有删除标签的edittext
举报原因:
原因补充:

(最多只允许输入30个字)