带删除的edittext

  1 package com.sixin.view;
  2
  3 import android.content.Context;
  4 import android.graphics.Canvas;
  5 import android.graphics.Color;
  6 import android.graphics.Paint;
  7 import android.graphics.Rect;
  8 import android.graphics.drawable.Drawable;
  9 import android.text.Editable;
 10 import android.text.TextWatcher;
 11 import android.util.AttributeSet;
 12 import android.view.MotionEvent;
 13 import android.widget.EditText;
 14
 15 import com.sixin.R;
 16
 17 /**
 18  * 带删除图标的EditText
 19  *
 20  * @author shidongxue
 21  *
 22  */
 23 public class EditTextWithDel extends EditText {
 24     private Drawable imgInable;
 25     private Context mContext;
 26     private Paint mPaint;
 27
 28     public EditTextWithDel(Context context) {
 29         super(context);
 30         mContext = context;
 31         init();
 32     }
 33
 34     public EditTextWithDel(Context context, AttributeSet attrs, int defStyle) {
 35         super(context, attrs, defStyle);
 36         mContext = context;
 37         init();
 38     }
 39
 40     public EditTextWithDel(Context context, AttributeSet attrs) {
 41         super(context, attrs);
 42         mContext = context;
 43         init();
 44     }
 45
 46     private void init() {
 47         mPaint = new Paint();
 48         mPaint.setStyle(Paint.Style.STROKE);
 49         mPaint.setColor(Color.GRAY);
 50         imgInable = mContext.getResources().getDrawable(R.drawable.btn_del);
 51         addTextChangedListener(new TextWatcher() {
 52             @Override
 53             public void onTextChanged(CharSequence s, int start, int before, int count) {
 54             }
 55
 56             @Override
 57             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
 58             }
 59
 60             @Override
 61             public void afterTextChanged(Editable s) {
 62                 setDrawable();
 63             }
 64         });
 65         setDrawable();
 66     }
 67
 68     // 设置删除图片
 69     public void setDrawable() {
 70         if (length() > 0 && isFocused()) {
 71             setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
 72         } else {
 73             setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
 74         }
 75     }
 76
 77     @Override
 78     protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
 79         super.onFocusChanged(focused, direction, previouslyFocusedRect);
 80         if (focused) {
 81             setCursorVisible(true);
 82         } else {
 83             setCursorVisible(false);
 84         }
 85         setDrawable();
 86     }
 87
 88     // 处理删除事件
 89     @Override
 90     public boolean onTouchEvent(MotionEvent event) {
 91         if (imgInable != null && event.getAction() == MotionEvent.ACTION_UP) {
 92             int eventX = (int) event.getRawX();
 93             int eventY = (int) event.getRawY();
 94             Rect rect = new Rect();
 95             int r = getPaddingRight();
 96             getGlobalVisibleRect(rect);
 97             rect.left = rect.right - r - 60;
 98             rect.right = rect.right - r;
 99             if (rect.contains(eventX, eventY))
100                 setText("");
101         }
102         return super.onTouchEvent(event);
103     }
104
105     @Override
106     protected void onDraw(Canvas canvas) {
107         super.onDraw(canvas);
108     }
109
110     @Override
111     protected void finalize() throws Throwable {
112         super.finalize();
113     }
114
115 }
时间: 2024-10-12 14:25:22

带删除的edittext的相关文章

35.Android之带删除按钮EditText学习

今天实现Android里自定义带删除功能的EditText,效果如下: 当输入内容时,EditText变为带有一个删除功能按钮的编辑框,如图: 实现代码很简单,直接上代码, 布局文件xml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 an

【Android-EditText】自定义带删除功能的EditText

我们经常在一些应用中见到输入框带有删除功能,今天我们就来实现这个功能(文字组织能力不强,大家随便看看).主要是记录一下自己的学习经历,如果对大家有帮助,我会更开心的. 先上图: 实现要点: 1.当输入框为空时,删除按钮隐藏: 2.当输入框不为空时,显示删除按钮. 核心代码: package com.example.view; import com.example.ui.R; import android.content.Context; import android.graphics.Rect;

Android--&gt;轻松打造带删除按钮的输入框(EditText),附Emoji表情过滤

输入框带删除按钮, 此乃标配, 实现起来方法也很多, 网上开源也很多. 但是, 没事就喜欢瞎折腾. 上图说话. 只是在原生的基础上加了扩展. 相对来说入侵非常少, 使用方法和原生的一模一样.无任何阉割. 完整代码: public class ExEditText extends AppCompatEditText { Rect clearRect = new Rect(); public ExEditText(Context context) { super(context); } public

android 实现带清除效果的EditText(附带抖动效果)

Android一直没有提供类似于ios中自带清除效果的输入框(ios只要只要添加属性即可实现),所以在Android当中 想要实现此效果就需要使用自定义控件的方式实现. 思路:可以使用一个Linearlayout里面横向布局一个EditText和一个删除的图片,监听输入框的焦点和文字变化,设置图片的显隐和点击清除事件.但是这么做些弊端,首先增加了UI布局的层级结构不利于UI结构的优化而且可能会出现文字过长遮挡住图片的情况.所以采用自定义控件继承于EditText,使用getCompoundDra

[Android]自己定义带删除输入框

在项目开发中,带删除button输入框也是人们经常常使用到的,该文章便介绍一下怎样创建一个带删除输入框.当中,须要解决的问题例如以下: a)创建自己定义editText类 b)在自己定义editText中显示删除图片 c)依据输入框的输入情况显示或隐藏图片 d)点击删除图片文字消失,图片隐藏 e)依据输入框焦点失去和获得状态显示或隐藏图片 好了.问题明白了.開始实现功能: a)创建一个名为MyClearEditText的class文件,并集成EditText,实现其构造方法: public My

iOS_绘制带删除线的Label

效果图例如以下: 一个带删除线的文本标签,继承自UILabel 自绘代码过程例如以下: 1,重写控件的drawRect方法 2,首先得到上下文对象 3,设置颜色,并指定是填充(Fill)模式还是笔刷(Stroke)模式 4,在上下文中指定删除线的起点(含x,y) 5,依据标签文字的字体,确定文字的长度(即将被画的线条的长度) 6,指定删除线的终点(含x,y) 7,渲染到上下文,完毕路径的绘制

FZU - 2155 - 盟国 (带删除的并查集~~)

Problem 2155 盟国 Accept: 140    Submit: 464 Time Limit: 5000 mSec    Memory Limit : 32768 KB  Problem Description 世界上存在着N个国家,简单起见,编号从0~N-1,假如a国和b国是盟国,b国和c国是盟国,那么a国和c国也是盟国.另外每个国家都有权宣布退盟(注意,退盟后还可以再结盟). 定义下面两个操作: "M X Y" :X国和Y国结盟 "S X" :X国

UVA - 11987 Almost Union-Find(带删除的并查集)

Almost Union-Find Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description Problem A Almost Union-Find I hope you know the beautiful Union-Find structure. In this problem, you're to implement something simil

自定义EditText,带删除按键

带清空按键,还可左右加图片,默认的是加了清空图片. 清空内容是判断的手势点击EditText的范围. 自定义EditText代码如下: import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import androi