文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android 之 监听 EditText 的内容变化

2023-08-31 18:47

关注

本节引言:

在前面我们已经学过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);

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

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

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

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

实现效果图:

自定义EditText:DelEditText.java

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;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.java

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 savedInstanceState) {        super.onCreate(savedInstanceState);        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

                                               

来源地址:https://blog.csdn.net/leyang0910/article/details/131251739

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯