全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

当用户输入字符后 EditText会自动在输入框的内部右侧出现删除按钮

重写EditText达到简化布局的效果

效果图:

继承EditText

package com.example.myedittexttest;

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.view.MotionEvent;
import android.widget.EditText;

public class MyEditText extends EditText {
	private final String TAG = "MyEditText";
	private Drawable dRight;
	private Rect rBounds;

	public MyEditText(Context paramContext) {
		super(paramContext);
		initEditText();
	}

	public MyEditText(Context paramContext, AttributeSet paramAttributeSet) {
		super(paramContext, paramAttributeSet);
		initEditText();
	}

	public MyEditText(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
		super(paramContext, paramAttributeSet, paramInt);
		initEditText();
	}

	// 初始化edittext 控件
	private void initEditText() {
		setEditTextDrawable();
		addTextChangedListener(new TextWatcher() { // 对文本内容改变进行监听
			@Override
			public void afterTextChanged(Editable paramEditable) {
			}

			@Override
			public void beforeTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3) {
			}

			@Override
			public void onTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3) {
				MyEditText.this.setEditTextDrawable();
			}
		});
	}

	// 控制图片的显示
	public void setEditTextDrawable() {
		if (getText().toString().length() == 0) {
			setCompoundDrawables(null, null, null, null);
		} else {
			setCompoundDrawables(null, null, this.dRight, null);
		}
	}

	@Override
	protected void onDetachedFromWindow() {
		super.onDetachedFromWindow();
		this.dRight = null;
		this.rBounds = null;

	}

	/**
	 * 添加触摸事件 点击之后 出现 清空editText的效果
	 */
	@Override
	public boolean onTouchEvent(MotionEvent paramMotionEvent) {
		if ((this.dRight != null) && (paramMotionEvent.getAction() == 1)) {
			this.rBounds = this.dRight.getBounds();
			int i = (int) paramMotionEvent.getRawX();// 距离屏幕的距离
			// int i = (int) paramMotionEvent.getX();//距离边框的距离
			if (i > getRight() - 3 * this.rBounds.width()) {
				setText("");
				paramMotionEvent.setAction(MotionEvent.ACTION_CANCEL);
			}
		}
		return super.onTouchEvent(paramMotionEvent);
	}

	/**
	 * 显示右侧X图片的
	 * 
	 * 左上右下
	 */
	@Override
	public void setCompoundDrawables(Drawable paramDrawable1, Drawable paramDrawable2, Drawable paramDrawable3, Drawable paramDrawable4) {
		if (paramDrawable3 != null)
			this.dRight = paramDrawable3;
		super.setCompoundDrawables(paramDrawable1, paramDrawable2, paramDrawable3, paramDrawable4);
	}
}

XML布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context=".MainActivity" >

  <com.example.myedittexttest.MyEditText
    android:id="@+id/edit_text"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_marginTop="50dp"
    android:background="#88aaff"
    android:drawableRight="@drawable/edit_clear"
    android:textCursorDrawable="@null" />

  <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/edit_text"
    android:layout_marginTop="84dp"
    android:layout_toRightOf="@+id/textView1"
    android:text="Button" />

</RelativeLayout>

XML中的属性简介:

显示右侧的X 按钮:

android:drawableRight="@drawable/edit_clear"

设置光标的颜色 设置@null 表示光标的颜色和输入框的字体颜色相同

android:textCursorDrawable="@null"

显示隐藏光标

android:cursorVisible="true"//显示

android:cursorVisible="false"//隐藏

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # EditText清空按钮  # EditText清空  # Android自定义view实现TextView方形输入框  # Android 实现带头部文字输入框的自定义控件  # Android自定义view实现输入框效果  # Android View教程之自定义验证码输入框效果  # Android自定义控件通用验证码输入框的实现  # Android 自定义密码输入框实现代码  # Android 详解自定义圆角输入框和按钮的实现流程  # 输入框  # 清空  # 希望能  # 自定义  # 重写  # 谢谢大家  # edittext  # paramInt  # int  # void  # setEditTextDrawable  # addTextChangedListener  # Override  # paramAttributeSet  # dRight  # TAG  # String  # rBounds  # initEditText  # super 


相关文章: 北京营销型网站制作公司,可以用python做一个营销推广网站吗?  XML的“混合内容”是什么 怎么用DTD或XSD定义  C++中引用和指针有什么区别?(代码说明)  如何打造高效商业网站?建站目的决定转化率  常州企业建站如何选择最佳模板?  制作旅游网站html,怎样注册旅游网站?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  建站org新手必看:2024最新搭建流程与模板选择技巧  C#如何在一个XML文件中查找并替换文本内容  高端建站如何打造兼具美学与转化的品牌官网?  如何通过宝塔面板实现本地网站访问?  学校建站服务器如何选型才能满足性能需求?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  制作网站公司那家好,网络公司是做什么的?  公众号网站制作网页,微信公众号怎么制作?  购物网站制作公司有哪些,哪个购物网站比较好?  如何配置IIS站点权限与局域网访问?  宝塔建站后网页无法访问如何解决?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  制作网站外包平台,自动化接单网站有哪些?  平台云上自主建站:模板化设计与智能工具打造高效网站  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  专业公司网站制作公司,用什么语言做企业网站比较好?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  网站制作服务平台,有什么网站可以发布本地服务信息?  如何通过VPS建站实现广告与增值服务盈利?  建站主机功能解析:服务器选择与快速搭建指南  网站专业制作公司有哪些,做一个公司网站要多少钱?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何实现建站之星域名转发设置?  海南网站制作公司有哪些,海口网是哪家的?  自助网站制作软件,个人如何自助建网站?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  如何通过商城免费建站系统源码自定义网站主题?  如何零基础开发自助建站系统?完整教程解析  ,如何利用word制作宣传手册?  七夕网站制作视频,七夕大促活动怎么报名?  ,柠檬视频怎样兑换vip?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  ,巨量百应是干嘛的?  代刷网站制作软件,别人代刷火车票靠谱吗?  如何通过NAT技术实现内网高效建站?  独立制作一个网站多少钱,建立网站需要花多少钱?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  智能起名网站制作软件有哪些,制作logo的软件? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。