【Android源码解析】 自定义可清除的输入框

简介: 版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/47417337 今天给大家分享一下这个关于Edittext,之前用到过要求能一键清除的输入框,想了一下思路,可以在输入框的旁边放一个小的清除图片,然后给Edittext和清除的小图片放到布局中,给布局来一个背景图片,看起来也比较美观的,然后根据edittext.getText().length来设置小图片是否可见,觉得也还行。
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/47417337


今天给大家分享一下这个关于Edittext,之前用到过要求能一键清除的输入框,想了一下思路,可以在输入框的旁边放一个小的清除图片,然后给Edittext和清除的小图片放到布局中,给布局来一个背景图片,看起来也比较美观的,然后根据edittext.getText().length来设置小图片是否可见,觉得也还行。但是随着自己见得多了就发现这样虽然也能实现,真的很水,所以就想着自定义一个能清除的Edittext。

下面说一下自己的思路:

1.首先自定义组件继承edittext

2.重写构造方法,初始化一个清楚按钮的小图标,并设置它的位置

3.监听edittext的焦点改变,根据焦点变化显示隐藏小图标

4.重写一个小图标的按钮点击事件

贴上部分代码:

 /**
     * 这里我们不能设置edittext的点击事件,所以我们可以这样做一下:
     * 当我们按下的位置 是在(输入框的宽度-图标的宽度-图标距离右侧的宽度)和(输入框的宽度-图标到右侧的宽度)之间
     * 也就是说我们按下的位置处于图标的附近,设置输入框
     * by Hankkin  at:2015年8月11日 16:45:42
     * @param event
     * @return
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (getCompoundDrawables()[2]!=null){
            if (event.getAction() == MotionEvent.ACTION_UP){
                boolean touchable = event.getX()>(getWidth()-getPaddingRight()-deleteDraw.getIntrinsicWidth())&&
                        (event.getX() < ((getWidth() - getPaddingRight())));
                if (touchable){
                    setText("");
                }

            }
        }
        return super.onTouchEvent(event);
    }
/**
     * 设置清除图片是否可见
     * by Hankkin at:2015年8月11日 16:17:24
     * @param isVisible
     */
    private void setDeleteVisible(boolean isVisible){
        Drawable drawable = isVisible?deleteDraw:null;
        setCompoundDrawables(getCompoundDrawables()[0],getCompoundDrawables()[1],drawable,getCompoundDrawables()[3]);
    }

    /**
     * 根据edittext的焦点变化改变图片的显示与否,输入框里的字符串长度如果大于0,显示,否则隐藏
     * by Hankkin at:2015年8月11日 16:32:47
     * @param v
     * @param hasFocus
     */
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus){
            setDeleteVisible(getText().length()>0);
        }else {
            setDeleteVisible(false);
        }
    }

然后在我们xml直接引用这个控件就ok了

github地址:

https://github.com/Hankkin/ClearEditTextDemo.git

源码地址:

http://download.csdn.net/detail/lyhhj/8991711

相关文章
|
1天前
|
Android开发 异构计算 前端开发
Android显示原理,安卓自定义view面试
Android显示原理,安卓自定义view面试
|
1天前
|
Linux 网络安全 Windows
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
|
1天前
|
Android开发
Android高级开发面试题以及笞案整理,实战解析
Android高级开发面试题以及笞案整理,实战解析
|
1天前
|
Android开发
71,字节跳动历年校招Android面试真题解析
71,字节跳动历年校招Android面试真题解析
|
1天前
|
Android开发 开发者 容器
Android自定义View:MeasureSpec的真正意义与View大小控制
Android自定义View:MeasureSpec的真正意义与View大小控制
|
1天前
|
JSON Java API
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
|
1天前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Android-kotlin-接口与多态的表现,面经解析
Android-kotlin-接口与多态的表现,面经解析
|
1天前
|
API Android开发 C++
【字节跳动大牛系列教学】Android源码剖析之Framwork层消息传递
【字节跳动大牛系列教学】Android源码剖析之Framwork层消息传递
|
2天前
HuggingFace Tranformers 源码解析(4)
HuggingFace Tranformers 源码解析
5 0

推荐镜像

更多