android自定义EditText

原文地址:android自定义EditText
http://www.apkbus.com/android-174511-1-1.html?fromuid=257244

(出处: http://www.apkbus.com/)


看到微信上面的EditText比较漂亮,决定做出效果来。
   为了更高的复用和减少代码的冗余所以按照用户体验师的要求自定义了一个EditText。         EditTextWithDel组件的功能如下:        1、在没用内容的时候显示不可用的图片状态,在有内容的时候显示可用的图片状态;        2、在有内容的时候点击删除按钮可以删除EditText中的内容;话不多说,上图,上代码。
package com.sunday.customs;


import com.example.customs.R;

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

/**
* @author sunday
* 2013-12-04
*/
public class EditTextWithDel extends EditText {
        private final static String TAG = "EditTextWithDel";
        private Drawable imgInable;
        private Drawable imgAble;
        private Context mContext;

        public EditTextWithDel(Context context) {
                super(context);
                mContext = context;
                init();
        }

        public EditTextWithDel(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
                mContext = context;
                init();
        }

        public EditTextWithDel(Context context, AttributeSet attrs) {
                super(context, attrs);
                mContext = context;
                init();
        }
        
        private void init() {
                imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray);
                imgAble = mContext.getResources().getDrawable(R.drawable.delete);
                addTextChangedListener(new TextWatcher() {
                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {}
                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
                        @Override
                        public void afterTextChanged(Editable s) {
                                setDrawable();
                        }
                });
                setDrawable();
        }
        
        //设置删除图片
        private void setDrawable() {
                if(length() < 1)
                        setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
                else
                        setCompoundDrawablesWithIntrinsicBounds(null, null, imgAble, null);
        }
        
         // 处理删除事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (imgAble != null && event.getAction() == MotionEvent.ACTION_UP) {
            int eventX = (int) event.getRawX();
            int eventY = (int) event.getRawY();
            Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
            Rect rect = new Rect();
            getGlobalVisibleRect(rect);
            rect.left = rect.right - 50;
            if(rect.contains(eventX, eventY)) 
                    setText("");
        }
        return super.onTouchEvent(event);
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }

}


20131204174736109.jpg (26.57 KB, 下载次数: 11)

20131204174736109.jpg

EdtiTextWithDel.zip

1018.41 KB


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值