当前位置:

首页 > 系统应用 > 3.5 监听EditText的内容变化

3.5 监听EditText的内容变化

本文目录

    本节引言: 在前面我们已经学过EditText控件了,本节来说下如何监听输入框的内容变化! 这个再实际开发中非常实用,另外,附带着说下如何实现EditText的密码可见 与不可见!好了,开始本节内容! 1.监听EditText的内容变化 从题意就能看出来,这里走的其实还是基于监听的事件处理机制。前面

    本节引言:

    在前面我们已经学过EditText控件了,本节来说下如何监听输入框的内容变化! 这个再实际开发中非常实用,另外,附带着说下如何实现EditText的密码可见 与不可见!好了,开始本节内容!

    1.监听EditText的内容变化

    从题意就能看出来,这里走的其实还是基于监听的事件处理机制。前面点击事件用的是OnClickListener,那对应到文本内容变化这一类场景,使用的就是:TextWatcher。也就是说,可以通过EditText.addTextChangedListener(mTextWatcher); 给EditText挂上文本内容变化监听。

    简单说下TextWatcher,实现该类需实现三个方法:

    public void beforeTextChanged(CharSequence s, int start,int count, int after);   
    public void onTextChanged(CharSequence s, int start, int before, int count);
    public void afterTextChanged(Editable s);

    依次会在下述情况中触发:

    • 1.内容变化前
    • 2.内容变化中
    • 3.内容变化后

    我们可以根据实际的需求重写相关方法,一般重写得较多的是第三个方法!

    监听EditText内容变化的场合有很多: 限制字数输入,限制输入内容等等~

    这里给大家实现一个简单的自定义EditText,输入内容后,有面会显示一个叉叉的圆圈,用户点击后 可以清空文本框~,当然你也可以不自定义,直接为EditText添加TextWatcher然后设置下删除按钮~

    实现效果图:

    自定义EditText:DelEditText.ja va

    package demo.com.jay.buttondemo;
    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;
    /**
     * Created by coder-pig on 2015/7/16 0016.
     */
    public class DelEditText extends EditText {
    private Drawable imgClear;
        private Context mContext;
    public DelEditText(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.mContext = context;
            init();
        }
    private void init() {
            imgClear = mContext.getResources().getDrawable(R.drawable.delete_gray);
            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 editable) {
                    setDrawable();
                }
            });
        }
    //绘制删除图片
        private void setDrawable(){
            if (length() < 1)
                setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
            else
                setCompoundDrawablesWithIntrinsicBounds(null, null, imgClear, null);
        }
    //当触摸范围在右侧时,触发删除方法,隐藏叉叉
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if(imgClear != 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);
        }
    @Override
        protected void finalize() throws Throwable {
            super.finalize();
        }
    }

    EditText的背景drawable:bg_frame_search.xml

    
    
        
        
        
    

    颜色资源:color.xml

    
    
        #FFFFFF
        #3086E4
        #40BAF8
        #ADAEAD
        #FFFFFF
        #e75049
    

    布局文件:activity_main.xml

    
    
    

    PS:代码是非常简单的,就不解释了~

    2.实现EditText的密码可见与不可见

    这个也是一个很实用的需求,就是用户点击按钮后可让EditText中的密码可见或者不可见~

    实现效果图:

    实现代码: activity_main.xml

    
    
    

    MainActivity.ja va

    package com.jay.demo.edittextdemo;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.method.HideReturnsTransformationMethod;
    import android.text.method.PasswordTransformationMethod;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    public class MainActivity extends AppCompatActivity {
    private EditText edit_pawd;
        private Button btnChange;
        private boolean flag = false;
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            edit_pawd = (EditText) findViewById(R.id.edit_pawd);
            btnChange = (Button) findViewById(R.id.btnChange);
            edit_pawd.setHorizontallyScrolling(true);    //设置EditText不换行
            btnChange.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(flag == true){
                        edit_pawd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                        flag = false;
                        btnChange.setText("密码不可见");
                    }else{
                        edit_pawd.setTransformationMethod(PasswordTransformationMethod.getInstance());
                        flag = true;
                        btnChange.setText("密码可见");
                    }
                }
            });
        }
    }

    editborder.xml

      
      
      
          
      
          
          
          
     

    本节小结:

    本节就到这里,谢谢~

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    系统应用
    相关文章 更多
    怎么将Win10家庭中文版无损升级到专业版
    怎么将Win10家庭中文版无损升级到专业版

    详细讲解如何通过微软官方渠道,使用有效产品密钥将Windows 10家庭中文版无损升级为专业版,保留原有文件与应用,并提供激活状态检查与故障处理建议。

    win10取消开机密码后远程访问电脑会受影响吗?
    win10取消开机密码后远程访问电脑会受影响吗?

    详解Win10取消开机密码后,远程桌面(RDP)和局域网文件共享为何无法连接。分析空密码账户的安全限制,区分自动登录与远程授权的区别,并提供安全的远程访问配置建议。

    win10重装系统后,怎么快速取消开机登录密码
    win10重装系统后,怎么快速取消开机登录密码

    Win10重装后每次开机都要输密码?本教程教你先分辨本地账户与Microsoft账户,再通过密码置空、设置PIN或使用netplwiz配置自动登录,快速实现开机直接进入桌面,同时保障账户安全。

    win10企业版取消开机密码需要注意哪些设置
    win10企业版取消开机密码需要注意哪些设置

    Win10企业版取消开机密码前需确认设备是否加入域或受组策略管理。本文详解如何区分本地账户与Microsoft账户,正确设置自动登录,以及处理企业环境下的登录策略限制,确保操作合规且安全。

    win10纯净版系统取消开机密码和原版系统有区别吗?
    win10纯净版系统取消开机密码和原版系统有区别吗?

    想知道Win10纯净版取消开机密码和原版有区别吗?本文提供详细步骤,包括检查系统版本、使用设置菜单或netplwiz命令取消密码,以及处理纯净版可能遇到的策略限制问题,帮助你安全便捷地实现自动登录。

    Windows 10登录密码、PIN与自动登录设置的安全区别及排查【一文讲解】
    Windows 10登录密码、PIN与自动登录设置的安全区别及排查【一文讲解】

    想取消Win10开机密码?先分清账户密码、PIN码和自动登录的区别。本文提供安全操作步骤,教你如何用PIN替代密码,评估自动登录风险,并解决登录异常问题,避免误删凭据导致数据丢失。

    win10系统更新推送频繁怎么减少更新提示
    win10系统更新推送频繁怎么减少更新提示

    Windows 10更新弹窗频繁影响工作?无需禁用服务,只需调整活动时间、安排重启和优化通知设置,即可有效减少干扰并保持系统安全。

    win10怎么查看当前系统自动更新有没有被关闭
    win10怎么查看当前系统自动更新有没有被关闭

    想知道Win10自动更新是否被关闭?不要只看任务栏。本文教你通过“设置-更新和安全”、“高级选项”及“services.msc服务”三处位置,准确判断系统更新状态是暂停、运行还是受组织策略管理。

    win10休眠唤醒和开机登录密码可以分开取消吗?
    win10休眠唤醒和开机登录密码可以分开取消吗?

    想知道Win10能否只取消休眠唤醒密码而保留开机密码?本教程详解如何通过系统设置和netplwiz工具,分别控制开机登录与睡眠唤醒后的验证要求,实现灵活的安全策略。

    win10取消开机密码之后如何恢复密码登录
    win10取消开机密码之后如何恢复密码登录

    Win10取消开机密码后想恢复?本教程详解如何通过netplwiz恢复开机输入框、重新设置空密码账户、配置PIN码及调整睡眠唤醒登录策略,步骤清晰,即改即验。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。