效果图如下:

备注:附带一个隐藏和显示密码的功能实现。

activity_main.xml布局文件的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"xmlns:android="http://schemas.android.com/apk/res/android"><com.deepreality.userdefinededittextdemo.DelEditTextandroid:layout_width="match_parent"android:layout_height="40dp"android:hint="带有删除的EditText"android:textSize="14dp"android:background="@drawable/edittext_search"android:maxLength="20"android:paddingRight="10dp"android:paddingLeft="5dp"android:singleLine="true"/><LinearLayout android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="10dp"android:orientation="horizontal"><EditTextandroid:id="@+id/edit_pawd"android:layout_width="0dp"android:layout_weight="1"android:layout_height="48dp"android:inputType="textPassword"android:background="@drawable/edittext_search"/><CheckBoxandroid:id="@+id/cbChange"android:layout_width="100dp"android:layout_height="48dp"android:text="密码可见"/></LinearLayout></LinearLayout>

其中的EditText样式,自定义一个Shape样式。可以参考之前的安卓开发中TextView的常见用法(总结),如果忘记的话。

布局文件中的EditText是自定义的。DelEditText.java的代码如下:

package com.deepreality.userdefinededittextdemo;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;public class DelEditText extends android.support.v7.widget.AppCompatEditText {private Context context;private Drawable drawableDel;public DelEditText(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;init();}private void init() {//给Drawable赋值drawableDel = context.getResources().getDrawable(R.mipmap.edittext_delete);//添加文本内容变化监听事件addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {setDrawable();}});}//绘制删除图片private void setDrawable() {if (length() < 1) {setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);} else {setCompoundDrawablesWithIntrinsicBounds(null, null, drawableDel, null);}}//当触摸范围在右侧时,触发删除方法,隐藏删除图片@Overridepublic boolean onTouchEvent(MotionEvent event) {if (drawableDel != null && event.getAction() == MotionEvent.ACTION_UP) {int eventX = (int) event.getRawX();int eventY = (int) event.getRawY();Rect rect = new Rect();getGlobalVisibleRect(rect);rect.left = rect.right - 100;if (rect.contains(eventX, eventY)) {setText("");}}return super.onTouchEvent(event);}@Overrideprotected void finalize() throws Throwable {super.finalize();}
}

接下来,我们只要在相关的Activity中处理即可。

MainActivity.java的代码如下:

package com.deepreality.userdefinededittextdemo;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;public class MainActivity extends AppCompatActivity {private EditText edit_pawd;private CheckBox cbChange;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);edit_pawd = (EditText) findViewById(R.id.edit_pawd);cbChange = (CheckBox) findViewById(R.id.cbChange);edit_pawd.setHorizontallyScrolling(true);    //设置EditText不换行cbChange.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (isChecked) {//显示密码edit_pawd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());} else {//不显示密码edit_pawd.setTransformationMethod(PasswordTransformationMethod.getInstance());}}});}
}

Android开发中实现带有删除图标的EditText输入框相关推荐

  1. 史上最全Android开发中100%会用到的开源框架整理(1/5)

    其实这个开源框架整理很久了,只是一直放在有道云笔记里面,笔者还有很多写得文章都放在有道云笔记里面,有时间都好好整理一下放出来,本篇文章也会不定期更新,由于整理的开源框架分类都有200多个,所有这次只将 ...

  2. Android开发中的一些小知识点记录(101-120)

    编写不易,如有转载,请声明出处:http://blog.csdn.net/zxc514257857/article/details/118554522 Android开发中的一些小知识点记录(1-20 ...

  3. Android开发中遇到的bug

    1.将Eclipse项目导入到Android studio 中 很多点9图出现问题解决方法 在build.gradle里添加以下两句: aaptOptions.cruncherEnabled = fa ...

  4. Android开发中的多线程编程技术

    Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的&q ...

  5. android开发中遇到的问题汇总

    android开发中遇到的问题汇总(五),android汇总127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框 http://dwtedx.com/itshare_297.html1 ...

  6. Android开发中的WMS详细解析

    /   今日科技快讯   / 近日,小冰公司宣布对旗下人工智能数字员工产品线启动年度升级.本次升级加强的技术包括大模型对话引擎.3D神经网络渲染.超级自然语音及AIGC人工智能内容生成.小冰公司计划将 ...

  7. Android开发中的日常积累

    欢迎Star,Fork https://github.com/lizhangqu/CoreLink 里面记录了开发过程中有用的东西,欢迎补充,不定时更新. Android 性能优化 Android内存 ...

  8. Android 开发中的日常积累

    Android 性能优化 Android性能优化视频,文档以及工具 胡凯-性能优化 Android最佳性能实践(1):合理管理内存 Android最佳性能实践(2):分析内存的使用情况 Android ...

  9. 浅谈Android开发中的NFC功能

    目录 1."NFC"的自我描述 1.1 NFC功能的基本概念 1.2 NFC功能的背景.特性及发展趋势 2.NFC的基础知识.基本原理 2.1 NFC的工作模式 2.2 实现NFC ...

最新文章

  1. java反射类带构造函数_java中反射类的加载和构造函数
  2. cnblog项目--20190309
  3. java中过滤器、监听器、拦截器的区别
  4. 24-hadoop-hiveserver2jdbc-正则数据导入
  5. Expected an Objective directive after @ 的解决办法
  6. 支持向量机中到底什么是支持向量
  7. Eclipse使用SVN操作说明
  8. mie散射理论方程_腾讯游戏学院专家:PBR渲染模型的理论及具体应用
  9. 一个“想忘带东西都难”的出行指南
  10. DevOps使用教程 华为云(7)团队绩效评估 工时统计
  11. slub分配流程-kmem_cache_alloc函数
  12. arm汇编—str,mov等指令
  13. ftp服务器连接不了文件路径,Serv-U和CuteFTP无法连接FTP服务器问题解答
  14. Ubuntu系统下载网易云音乐
  15. php数组竖转横,数组纵向转横向怎么实现
  16. 无光照渲染shader-二次元
  17. JS 内存泄漏与垃圾回收机制
  18. 游戏建模初学者必看的游戏人物模型贴图制作方法及制作小技巧
  19. 信息系统管理工程师 - 2017年真题(下午卷,应用技术)考点解析
  20. python微信语音转发_Python 微信公众号开发(2)——听得懂语音消息的聊天机器人...

热门文章

  1. PS调清晰度,去水印小妙招
  2. linux修改文件/目录所属的用户和组
  3. 3D美术12——max——解决模型平滑组失效问题
  4. 如何申请创建数据分析项目组合
  5. 大数据智慧数字电商第三课 数据解析和etl落地dwd
  6. MySQL定时任务(每天凌晨3点钟执行)
  7. .net用DocX把word转为pdf
  8. 2022年云计算的趋势有哪些
  9. 咖说丨生意的逻辑和借贷的利息
  10. 女生本科学会计还是学计算机,千万别和这几个专业的女生谈恋爱!尤其是.........