Android中多个EditText输入效果的解决方式
程序员文章站
2022-06-23 14:58:26
前言
在开发中,我们常常遇到这种情况
我们往往需要的是下面这种效果
但是如果把这些实现的代码写在activity中会比较麻烦,影响代码美观
解决方法...
前言
在开发中,我们常常遇到这种情况
我们往往需要的是下面这种效果
但是如果把这些实现的代码写在activity中会比较麻烦,影响代码美观
解决方法
于是就有了下面这个辅助类,禁用了按钮的点击事件和按钮的渐变色,可同时添加一个或者多个edittext
/** * 文本输入辅助类,通过管理多个textview或者edittext输入是否为空来启用或者禁用按钮的点击事件 */ public final class textinputhelper implements textwatcher { private view mmainview;//操作按钮的view private list<textview> mviewset;//textview集合,子类也可以(edittext、textview、button) private boolean isalpha;//是否设置透明度 public textinputhelper(view view) { this(view, true); } /** * 构造函数 * * @param view 跟随edittext或者textview输入为空来判断启动或者禁用这个view * @param alpha 是否需要设置透明度 */ public textinputhelper(view view, boolean alpha) { if (view == null) throw new illegalargumentexception("the view is empty"); mmainview = view; isalpha = alpha; } /** * 添加edittext或者textview监听 * * @param views 传入单个或者多个edittext或者textview对象 */ public void addviews(textview... views) { if (views == null) return; if (mviewset == null) { mviewset = new arraylist<>(views.length - 1); } for (textview view : views) { view.addtextchangedlistener(this); mviewset.add(view); } aftertextchanged(null); } /** * 移除edittext监听,避免内存泄露 */ public void removeviews() { if (mviewset == null) return; for (textview view : mviewset) { view.removetextchangedlistener(this); } mviewset.clear(); mviewset = null; } // 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 synchronized void aftertextchanged(editable s) { if (mviewset == null) return; for (textview view : mviewset) { if ("".equals(view.gettext().tostring())) { setenabled(false); return; } } setenabled(true); } /** * 设置view的事件 * * @param enabled 启用或者禁用view的事件 */ public void setenabled(boolean enabled) { if (enabled == mmainview.isenabled()) return; if (enabled) { //启用view的事件 mmainview.setenabled(true); if (isalpha) { //设置不透明 mmainview.setalpha(1f); } }else { //禁用view的事件 mmainview.setenabled(false); if (isalpha) { //设置半透明 mmainview.setalpha(0.5f); } } } }
在activity创建时添加监听
private textinputhelper minputhelper; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //创建一个辅助类,传入按钮操作view minputhelper = new textinputhelper(mbutton); //可添加一个或者多个edittext,当然也可以添加textview minputhelper.addviews(medittext1, medittext2, medittext3); }
在activity销毁时移除监听(避免内存泄露)
@override protected void ondestroy() { super.ondestroy(); //移除引用,避免内存泄露 minputhelper.removeviews(); }
需要注意的是这里不单单只是可以添加edittext,还可以添加textview,因为edittext是textview的子类,最后要是觉得好用记得点个赞。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: MySQL多表查询练习
下一篇: 开篇——从程序员到IT经理
推荐阅读
-
Android EditText设置Filter以后(xml布局文件中maxLength不起作用的解决办法)
-
Android TextWatcher监控EditText中的输入内容并限制其个数
-
Android中自定义的dialog中的EditText无法弹出输入法解决方案
-
关于Android官方开发教程中EditText editText = (EditText) findViewById(R.id.editText);报错的解决办法
-
Android中多个EditText输入效果的解决方式
-
Android Studio 界面布局之xml文件中给输入框editText修改下划线颜色 / 为按钮设置圆角和颜色 / 约束布局预览效果和运行效果不一致 问题的解决
-
Android开发中向ListView中动态添加多个EditText并保存相应的EditText中的值
-
Android EditText设置Filter以后(xml布局文件中maxLength不起作用的解决办法)
-
Android开发中为EditText的输入长度设置
-
Android爬坑之旅:软键盘挡住输入框问题的终极解决方式