Android Edittext 清空按钮功能 自定义

Android 自定义EditText输入框 带清空按钮,flutter二维码扫描第三方 super(paramContext); initEditText(); } public MyEditText(Context paramContext, AttributeSet paramAttributeSet) { super(paramContext, paramAttributeSet); initEditText(); } public MyEditText(Context paramContext, AttributeSet paramAttributeSet, int paramInt) 阅读详情

本文参考网络内容,感谢网友分享!


1. 自定义ClearEditText


import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.animation.Animation;
import android.view.animation.CycleInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.EditText;

import com.cn.fujielectric.fhs.opsys.android.R;

public class ClearEditText extends EditText implements OnFocusChangeListener,
		TextWatcher {
	/**
	 * 删除按钮的引用
	 */
	private Drawable mClearDrawable;
	/**
	 * 控件是否有焦点
	 */
	private boolean hasFoucs;

	public ClearEditText(Context context) {
		this(context, null);
	}

	public ClearEditText(Context context, AttributeSet attrs) {
		// 这里构造方法也很重要,不加这个很多属性不能再XML里面定义
		this(context, attrs, android.R.attr.editTextStyle);
	}

	public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}

	private void init() {
		// 获取EditText的DrawableRight,假如没有设置我们就使用默认的图片
		mClearDrawable = getCompoundDrawables()[2];
		if (mClearDrawable == null) {
			// throw new
			// NullPointerException("You can add drawableRight attribute in XML");
			mClearDrawable = getResources().getDrawable(R.drawable.delete);
		}

		mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(),
				mClearDrawable.getIntrinsicHeight());
		// 默认设置隐藏图标
		setClearIconVisible(false);
		// 设置焦点改变的监听
		setOnFocusChangeListener(this);
		// 设置输入框里面内容发生改变的监听
		addTextChangedListener(this);
	}

	/**
	 * 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件 当我们按下的位置 在 EditText的宽度 -
	 * 图标到控件右边的间距 - 图标的宽度 和 EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向就没有考虑
	 */
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if (event.getAction() == MotionEvent.ACTION_UP) {
			if (getCompoundDrawables()[2] != null) {

				boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())
						&& (event.getX() < ((getWidth() - getPaddingRight())));

				if (touchable) {
					this.setText("");
				}
			}
		}

		return super.onTouchEvent(event);
	}

	/**
	 * 当ClearEditText焦点发生变化的时候,判断里面字符串长度设置清除图标的显示与隐藏
	 */
	@Override
	public void onFocusChange(View v, boolean hasFocus) {
		this.hasFoucs = hasFocus;
		if (hasFocus) {
			setClearIconVisible(getText().length() > 0);
		} else {
			setClearIconVisible(false);
		}
	}

	/**
	 * 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去
	 * 
	 * @param visible
	 */
	protected void setClearIconVisible(boolean visible) {
		Drawable right = visible ? mClearDrawable : null;
		setCompoundDrawables(getCompoundDrawables()[0],
				getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
	}

	/**
	 * 当输入框里面内容发生变化的时候回调的方法
	 */
	@Override
	public void onTextChanged(CharSequence s, int start, int count, int after) {
		if (hasFoucs) {
			setClearIconVisible(s.length() > 0);
		}
	}

	@Override
	public void beforeTextChanged(CharSequence s, int start, int count,
			int after) {

	}

	@Override
	public void afterTextChanged(Editable s) {

	}

	/**
	 * 设置晃动动画
	 */
	public void setShakeAnimation() {
		// this.setAnimation(shakeAnimation(5));
		this.startAnimation(shakeAnimation(5));
	}

	/**
	 * 晃动动画
	 * 
	 * @param counts
	 *            1秒钟晃动多少下
	 * @return
	 */
	public static Animation shakeAnimation(int counts) {
		Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0);
		translateAnimation.setInterpolator(new CycleInterpolator(counts));
		translateAnimation.setDuration(1000);
		return translateAnimation;
	}

}


2. 布局(仅贴输入框部分)


    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1.5"
        android:gravity="bottom" >

        <TextView
            android:id="@+id/txv_username"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="20dp"
            android:layout_weight="1.5"
            android:text="@string/user_name"
            android:textSize="@dimen/BigLabelFontSize" />

        <com.csdnadcode.android.weight.ClearEditText
            android:id="@+id/edt_username"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_marginRight="10dp"
            android:layout_weight="4"
            android:background="@drawable/edit_bg_login"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:singleLine="true" >
        </com.csdnadcode.android.weight.ClearEditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal" >

        <View
            android:layout_width="10dp"
            android:layout_height="0.5dp"
            android:background="#FFFFFF" />

        <View
            android:layout_width="fill_parent"
            android:layout_height="0.5dp"
            android:background="#D4D4D4" />

        <View
            android:layout_width="10dp"
            android:layout_height="0.5dp"
            android:background="#FFFFFF" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1.5"
        android:gravity="bottom" >

        <TextView
            android:id="@+id/txv_password"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="20dp"
            android:layout_weight="1.5"
            android:text="@string/pass_word"
            android:textSize="@dimen/BigLabelFontSize" />

        <com.csdnadcode.android.weight.ClearEditText
            android:id="@+id/edt_password"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_marginRight="10dp"
            android:layout_weight="4"
            android:background="@drawable/edit_bg_login"
            android:inputType="textPassword"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:singleLine="true" >
        </com.csdnadcode.android.weight.ClearEditText>
    </LinearLayout>


3.代码实现


	// 用户名输入框
	private ClearEditText edtUserCode = null;
	// 密码输入框
	private ClearEditText edtPassWord = null;

<span style="white-space:pre">	</span>edtUserCode = (ClearEditText) this.findViewById(R.id.edt_username);
	edtPassWord = (ClearEditText) this.findViewById(R.id.edt_password);
<span style="white-space:pre">	edtUserCode.setSelection(edtUserCode.getText().length());
<span style="white-space:pre">	</span>edtPassWord.setSelection(edtPassWord.getText().length());</span>
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>//设置晃动效果
<span style="white-space:pre">	</span>edtUserCode.setShakeAnimation();
<span style="white-space:pre">	</span>edtPassWord.setShakeAnimation();



Android自定义带清除功能的EditText实战教程 在Android开发中,XML布局文件为视图组件的属性提供了丰富的定义方式。对于EditText组件而言,通过其XML属性可以实现外观和行为的初步定制。属性如和等,可以定义输入框的基本功能、提示文本、是否单行显示以及布局尺寸。举一个例子,以下是一段定义EditText的XML代码:<EditText在这段代码中,inputType属性确保了输入框能够提供适合文本类型(如名字)的键盘输入法。ems。 阅读详情

相关推荐

cleanedittext

带clean图标的EditText.

Android中ClearEditText实现点击EditText输入框右边清除图标来清除输入内容的两种方式

两种EditText输入框点击右边清除图标来实现清除功能的方式。 效果图下图: 布局代码如下, <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_

daitu_liang的博客 8383

EditText一键清空内容

俩种方式实现EditText一键清空内容!一种为原生,一种为 网上摘抄的较老自定义控件!We must day day up!!!

android 中重置按钮,android – 如何在动作完成后重置EditText?

我想在按下按钮后将EditText重置为空的“空格”或“提示”,该按钮将完成来自EditText字段输入的活动.我的Android冒险因此召唤.干杯.谢谢 !!//************-------------------SEND SMS----------------*********//btnSendSMS = (Button)findViewById(R.id.sms);btnSendS...

weixin_35804997的博客 1062

Android输入框控件ClearEditText实现清除功能

主要为大家详细介绍了Android输入框控件ClearEditText实现清除功能,感兴趣的小伙伴们可以参考一下

使用fluent计算流噪声_Fluent能够做的事

刚接触到fluent的同学们,应该会比较好奇,fluent能够做些什么事情,和你的研究有没有关联,能不能达到你的目的?如果不弄明白这样一点,前期可能会做很多无用功。 fluent是计算流体力学的软件,是一个工具。这样一个工具发展至今,可以用来模拟的绝不只有流体力学。下面我们依次来说明。首先是流动,fluent提供了非常丰富的流动模型,不仅可以模拟层流,同样还可以模拟...

weixin_28717647的博客 4857

带有一键清空功能的EditText

介绍  很常见的一个功能,大部分app在登录界面都会实现这个功能了。因为在掘金上看了一篇类似的文章,所以决定自己实践一下。   下图为实现效果:常见实现方法 组合控件,EditText + Button  实现简单,可以单独使用。 自定义View,继承EditText,通过EditText自带的Drawable来实现。  布局复杂度低 继承EditText来实现一键清功能需要考虑的问题根据业务

Siobhan的专栏 4935

从半导体物理到实战:手把手教你测量MOS管体二极管的Vf和Trr

本文深入探讨了MOSFET体二极管的关键参数测量方法,重点讲解了正向压降(Vf)和反向恢复时间(Trr)的测量原理与实战步骤。通过搭建测试平台,使用万用表和示波器等工具,手把手指导如何量化这些影响开关损耗和效率的核心参数,并对比分析了硅基与碳化硅(SiC)器件在体二极管性能上的显著差异。

n7o8p的博客 340

Android 自定义EditText输入框 带清空按钮

addTextChangedListener(new TextWatcher() { // 对文本内容改变进行监听。// 距离屏幕的距离。设置光标的颜色 设置@null 表示光标的颜色和输入框的字体颜色相同。android:cursorVisible=“false”//隐藏。android:cursorVisible=“true”//显示。// 初始化edittext 控件。// 控制图片的显示。

2501_90499511的博客 856

Unity URP热扭曲效果实战:如何让半透明物体也‘动’起来(附完整Shader代码)

本文深入解析Unity URP管线中热扭曲效果无法影响半透明物体的核心原因,并提供一套完整的实战解决方案。通过编写自定义Shader,并巧妙利用URP的Render Objects渲染器功能,成功让指定半透明物体(如粒子特效)也能被扭曲效果影响,从而制作出火焰、热浪等更具视觉冲击力的特效。文末附有完整的Shader代码与进阶优化技巧。

pz890123的博客 500

1.47寸ST7789V3彩屏硬件设计与驱动调试指南

TFT LCD是一种基于薄膜晶体管阵列控制像素明暗的主动式显示技术,其核心依赖于专用驱动IC(如ST7789V3)完成时序生成、GRAM管理与伽马校正。该类小尺寸彩色显示屏广泛应用于嵌入式HMI、IoT终端与可穿戴设备,具备高PPI、低功耗和SPI接口易集成等工程优势。理解RGB565数据格式、SPI Mode 0通信时序及关键寄存器(如0x36方向控制、0x3A像素格式、0x2A/0x2B地址窗口)是实现稳定显示的基础;而正确处理电源设计(严禁5V直供)、复位时序与背光PWM调光,则直接决定系统可靠性与能

weixin_30995917的博客 165

java删除按钮_Android自定义带有清空删除按钮的EditText控件

在Android EditText控件中,我们如何自定义带有清空删除按钮的EditText控件呢?非常的简单,我们只需要创建一个CleanableEditText类,继承于EditText即可,代码如下:packagecom.tpyyes.shouxie;importandroid.content.Context;importandroid.graphics.drawable.Drawabl...

weixin_34281191的博客 490

方法二:旋转机械动平衡精度计算

本文以实际案例为基础,系统阐述基于ISO 1940标准的动平衡精度G GG等级计算方法。通过角速度转换、许用剩余不平衡量e p e r e_{per}e per ​ 推导及G GG等级公式应用,结合惯性力偶矩、转子质量等参数,得出某转子系统的动平衡精度为G 40 G40G40。文中详细解析了公式原理与参数单位转换要点,并附完整ISO 1940动平衡等级参考表,为工程师提供从理论到实践的完整解决方案。研究结果表明,该方法可有效量化旋转机械的平衡精度,适用于风机、泵类等中低速设备的设计与调试,对提升设备运行

weixin_46153372的博客 920

android editText一键清空功能! 详细步骤

有LinearLayout+EditText+ImageView 的组合 也有自己封装实现在xml中使用

weixin_57038660的博客 3085

爬虫小例--爬药监局(上)

”明月如霜,好风如水,清景无限 “ 文远最近也算是爬虫入门吧,相信后面会慢慢熟悉。 壹 直接上例子,爬取药监局的数据。目的是得到每家公司的详情数据,例: 具体网址:http://scxk.nmpa.gov.cn:81/xk/ 这是主页,下面详情信息: 贰 分析,通过网页检查发现,主网页上没有公司相关数据,观察XHR中的Ajax请求发现,公司信息都是动态数据(方便更新),点击发现每个公司 的详情信息通过ID号这个参数区别,那么可以确定思路是先得到每个公司的ID号,然后在通过ID对应每一个详细网站,同样右键

john_ashley的博客 4556

医学图像处理实战:3D Slicer从安装到病灶分析全流程指南

本文提供了一份详尽的3D Slicer实战指南,涵盖从软件安装、DICOM数据导入到图像增强、病灶分割及三维可视化的全流程。重点演示了如何利用阈值分割、区域生长等核心图像处理技术进行病灶分析,并生成定量报告,是医学影像分析初学者的实用入门教程。

weixin_29278805的博客 600

Android输入框带删除按钮的自定义View

package com.aiitec.widgets; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawa

灵木111的博客 1333

YOLO26改进 - C2PSA | C2PSA融合CPIASA跨范式交互与对齐自注意力机制 : 交互对齐机制,提升小目标与遮挡目标判别力 | ACM MM2025

本文介绍了跨范式表征与对齐Transformer(CPRAformer)及其核心的跨范式交互与对齐自注意力机制(CPIA - SA),并阐述了其在YOLO26中的结合应用。传统图像去雨模型特征提取局限大,CPIA - SA通过协同“空间 - 通道”与“全局 - 局部”范式解决该问题,由SPC - SA、SPR - SA和AAFM子模块构成,经双路提取、动态过滤、空间细化、对齐融合四步工作。我们将相关代码引入指定目录,在`ultralytics/nn/tasks.py`中注册,配置`yolo26 - C2PS

魔改工程师的博客 664

android edittext 右边按钮,Android 自定义EditText, 增加设置右边取消按钮的属性

想要使用android自带的editText的drawable实现右边取消按钮的设置,但是设置之后,drawableRight并没有点击事件,因此本文在继承editText的基础上增加 setClearDrawMode属性,可以直接在layout的xml文件中配置实现上述功能,第一步在values下新建 attrs.xml文件 第二步新建UpEditText 继承EditText类public c...

weixin_28713083的博客 571

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

带删除按钮的EditText

package com.example.administrator.newspolice.view; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; im...

爱上网的大花猫 616

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android自定义带清空内容的TextView

android自定义带清空内容的TextView 代码: /** * 带删除按钮的EditText * @author Administrator * */ public class ClearEditText extends EditText implements OnFocusChangeListener, TextWatcher { /** * 删除按钮的引用 */

小白james 1万+

Android自定义EditText带清除功能

首先声明我也是参考了别人的思路,只是稍微做了下修改,增加显示密码与隐藏密码,没有输入字符串时让EditText进行抖动,废话少说这里附上效果图 效果很赞有木有 那么怎么实现这种效果呢?那就跟着我一起来吧 首先我们先分析一下清除功能怎么实现的,我们怎么知道用户点击的是清除按钮还是别的地方呢?,而EditText其实是集成Textview的, 而Textview有方法getTotal...

luhan_cc的博客 702

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

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

weixin_30902251的博客 197

带有清空功能的EditTtxt

带有清空按钮的EditText开源库效果图:基本介绍如下:使用方式:一.添加库依赖1. 项目的build.gradle下添加 allprojects { repositories { ... maven { url 'https://jitpack.io' } } }2. app的build.gradle下

Brioal Is Hardworking 447

EditText有内容时显示清空按钮,无内容时不显示

/** * Created by xiaoyee on 4/27/15 * 用户检测edittext输入状态,如果有内容,那么显示清空按钮,如果没有内容,则清空 * <p> * 用法: * <br/>edittext.addTextChangedListener(new InputWatcher(btnClear, etContent)); * <br/>{@li

沐怡旸的专栏 2214
上一篇: Android DatePicker 限制日期选择范围
下一篇: Android Edittext 清空按钮功能的实现
KeenSpace
博客等级 码龄12年 4粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值