带清除功能的EditText
来源:互联网 发布:视图可以对数据 编辑:程序博客网 时间:2024/06/05 23:06
在很多情况下,我们都会遇到需要清除编辑框的情况,特别是编辑内容过多时,一字字删除过于麻烦,所以如果编辑框自带按钮可以清除数据就再好不过了。本篇文章将对此有所讲解,方便大家学习与巩固。
我们都知道自定义控件的实现方式有三种,分别是:组合控件、自绘控件和继承已有控件。本篇涉及的控件就是通过继承已有控件的方式予以实现的。
以下是小编的效果图:
具体实现步骤如下:
1、首先新建一个类继承EditText,小编创建是ClearableEditText
package com.qian.clearableedittextdemo.custom;import android.content.Context;import android.graphics.drawable.Drawable;import android.support.v4.content.ContextCompat;import android.text.Editable;import android.text.TextWatcher;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.EditText;import com.qian.clearableedittextdemo.R;/** * Created by Administrator on 2017/6/22. */public class ClearableEditText extends android.support.v7.widget.AppCompatEditText{ private Drawable mClearableDrawable; public ClearableEditText(Context context) { super(context); init(context); } public ClearableEditText(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public ClearableEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context context) { //【1】判断编辑框右侧是否选择了默认图片:获取EditText的DrawableRight mClearableDrawable = getCompoundDrawables()[2]; if (mClearableDrawable == null) { // mClearDrawable = getResources().getDrawable(R.drawable.delete_selector);//getDrawable()已废弃 mClearableDrawable = ContextCompat.getDrawable(context,R.drawable.delete_icon); } mClearableDrawable.setBounds(0,0,mClearableDrawable.getIntrinsicWidth(),mClearableDrawable.getIntrinsicHeight()); //【2】清除数据判断 this.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { ClearableEditText et = ClearableEditText.this; if(event.getAction()==MotionEvent.ACTION_UP){ //【2-1】判断清除按钮是否存在 if (et.getCompoundDrawables()[2] == null) return false; /*【2-2】判断是否点击了清除按钮 * 即:按下的位置在 EditText的宽度 - 图标到控件右边的间距 - 图标的宽度 和 * EditText的宽度 - 图标到控件右边的间距之间(这里只考虑了水平位置上) */ if((event.getX()>et.getWidth()-et.getPaddingRight()-mClearableDrawable.getIntrinsicWidth()) && (event.getX()<et.getWidth()-et.getPaddingRight()) ){ //【2-3】清除数据 et.setText(""); } } return false; } }); //【3】是否显示清除按钮判断 this.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { // Log.d("字数","字数:"+s.length()+" ; 内容:"+s.toString()); setClearIconVisible(s.length() > 0); } }); } /** * 功能:设置清除按钮显示/去除 * @param visible 编辑框是否有内容 */ private void setClearIconVisible(boolean visible) { Drawable rightDrawable = visible ? mClearableDrawable : null; setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], rightDrawable, getCompoundDrawables()[3]); }}
2、在xml中引用ClearEditText
<com.qian.clearableedittextdemo.custom.ClearableEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="14sp" android:hint="请输入" android:background="@android:color/darker_gray" android:paddingBottom="5dp" android:paddingTop="5dp" android:paddingLeft="5dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp"/>
以上主要涉及的是EditText的两个监听器的使用:通过TextChangedListener监听编辑框是否存在数据,有则显示清除icon,无则去除icon;通过OnTouchListener判断是否按下清除图标(需先判断其是否存在),以便后续操作
项目地址(免费):http://download.csdn.net/detail/qq_37077360/9878516
阅读全文
0 0
- 带清除功能的EditText
- 带清除功能的EditText,仿IOS
- android 带清除功能的EditText
- 自定义带清除功能的EditText
- 带清除功能的输入框EditText
- ClearEditText,自带清除功能的EditText
- ClearEditText,自带清除功能的EditText
- 自定义带清除功能的EditText
- Android 带删除图标的EditText清除功能小Demo
- 实现带清除功能的文本输入框(EditText)
- 【android学习】带清除功能的EditText重写
- 带清除空能和匹配功能的自定义EditText
- Android自定义EditText带清除功能
- 带清除按钮的EditText~
- 自定义EditText:带清除按钮的EditText
- Android UI设计之<三>自定义EditText,实现带清除功能的输入框
- 自定义控件(一)--带清除和抖动功能的EditText
- Android带清除按钮的EditText
- leetcode刷题网站
- Jupyter Notebook 使用总结 Pycharm
- Qt开发之绘图
- C语言实现单链表(不带头结点)
- java WebSocket 简易聊天消息推送
- 带清除功能的EditText
- java集合
- 排序--[冒泡,Arrays.sort]
- LSMW批处理使用方法(13)_步骤18
- JavaScript 代码规范
- Java常用的几种排序算法
- Windows7_VS2013_Cmake编译Caffe源码(不带GPU支持)步骤
- Golang、pprof
- LZO