前言

在开发中,我们常常遇到这种情况

我们往往需要的是下面这种效果

但是如果把这些实现的代码写在Activity中会比较麻烦,影响代码美观

解决方法

于是就有了下面这个辅助类,禁用了按钮的点击事件和按钮的渐变色,可同时添加一个或者多个EditText

/**

* 文本输入辅助类,通过管理多个TextView或者EditText输入是否为空来启用或者禁用按钮的点击事件

*/

public final class TextInputHelper implements TextWatcher {

private View mMainView;//操作按钮的View

private List 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的子类,最后要是觉得好用记得点个赞。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

if函数如何嵌入多个android,Android中多个EditText输入效果的解决方式相关推荐

  1. Android开发中,使用 EditText 输入内容,实现【一键清空内容】

    本文仅为个人的处理方式,希望能对您有所帮助,欢迎各位留言指正,抱拳了 1.text.xml示例: <?xml version="1.0" encoding="utf ...

  2. Android开发中怎样调用系统Email发送邮件(多种调用方式)

    在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...

  3. android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果

    有时候我们对自己开发的项目经常不满意,但是我们要达到自定义刷新动画的效果有一定的难度,别着急,下面爱站技术频道和大家分享Android开发中MJRefresh自定义刷新动画效果,一起来学习吧! [一] ...

  4. android应用启动页面显示不出来了,Android应用中启动页出现白屏如何解决

    Android应用中启动页出现白屏如何解决 发布时间:2020-12-11 14:41:17 来源:亿速云 阅读:100 作者:Leah 今天就跟大家聊聊有关Android应用中启动页出现白屏如何解决 ...

  5. android led闪烁功能,如何在Android应用层中制作一个LED指示灯效果

    如何在Android应用层中制作一个LED指示灯效果 发布时间:2020-12-08 16:12:59 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关如何在Android应用层中 ...

  6. android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...

    在android开发中进行数据存储与访问的多种方式介绍 更新时间:2013年06月07日 16:24:23   作者: 很多时候我们的软件需要对处理后的数据进行存储或再次访问,Android为数据存储 ...

  7. Android开发中常见的内存泄露案例以及解决方法总结

    Android开发中常见的内存泄露案例以及解决方法总结 参考文章: (1)Android开发中常见的内存泄露案例以及解决方法总结 (2)https://www.cnblogs.com/shen-hua ...

  8. android api 设置,Android API中文文档EditText

    Android API中文文档EditText是本文要介绍的内容,主要是来了解并学习Android API文档的帮助,具体关于Android API的内容的详解来看本文. 一.Android API中 ...

  9. matlab中run按钮是灰色的,Android Studio中Run按钮是灰色的快速解决方法

    首先是,在不同的AS中,gradle版本不同,下载的sdk版本不同,这些,都在gradle(Project.Models)相关代码里调过来就好.之前的文章里有说过. 经过调好gradle这些文件,AS ...

最新文章

  1. redis持久化方案比较
  2. mysql my-small.ini_MySql优化之my-small.ini配置
  3. oracle data guard闪回,官方文档上的这段关于 DATAGUARD 闪回的解释,如何理解?
  4. app之---豆果美食
  5. 项目架构开发:数据访问层之Cache
  6. Redis:12---有序集合对象
  7. 21复变函数的积分(七)
  8. Android10 root,Android Q系统Magisk完美实现ROOT
  9. 牛皮!竟然有大佬基于 Spring Boot + Vue 开发了一套网易云QQ音乐(附源码)。。。...
  10. ‍炮灰模型---------- 对女生选择追求者的数学模型的建立
  11. JSON_EXTRACT JSON_UNQUOTE以及json数组下标选择
  12. opengl+openmesh重绘rabbit
  13. c语言图片渐入代码_如何用c语言读取图片
  14. modbus软件开发linux,Linux C开发之用modbus实现串口通讯
  15. 内核问题解决方法记录
  16. 在Harvester上安装windows sever 2012 r2
  17. java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener
  18. 哥本哈根大学计算机科学,2020年哥本哈根大学有哪些优势专业
  19. 社区团购小程序怎么做,全流程解析
  20. selenium+python实现自动登陆QQ邮箱,并发送邮件

热门文章

  1. 一个能极大提高生产率的Chrome新建标签页扩展
  2. 在SAP Cloud Platform ABAP编程环境里打印系统变量
  3. document builder how is document url being generated
  4. SAP IBASE logic of pt_equiindx
  5. table T371A field IBTYP的search help
  6. SAP UI5日期字段的显示逻辑和用法
  7. 使用nodejs和Java访问远程服务器的服务
  8. python中soup_python – 使用带有UTF-8的soup.get_text()
  9. python编程数学函数_【编程】Python数学函数
  10. java中channelmessage,MessageStore支持的QueueChannel与Spring Integration Java Config