Android-辅助工具-输入框控制控件状态

Android-辅助工具-输入框控制控件状态

Android小彩虹2021-07-12 0:05:4070A+A-

前言

​ 没有前言的文章总感觉少了什么,该文章纯粹为了备份。

简介

​ 多个输入框同时控制一个按钮控件的状态,为提高代码质量和代码的内聚程度,辅助工具油然而生。该工具的实现参考了一位博主的文章,文章连接找不到了,那就某某博主吧。再多的简介还不如一个效果图:

效果图

只输入一个时,按钮 enable = false

输入框控制控件状态_0.jpg

只有输入框都有内容时,按钮 enable = true

输入框控制控件状态_1.jpg

使用方法

为了避免EditText调用addTextChangedListener()而未注销监听导致内存泄露,辅助工具中添加了销毁的方法,在onDestroy中调用removeViews()方法进行移除监听。

1、首先声明对象

/** * 按钮样式控制工具 */
TextInputUtils nextHelper;

2、实例化对象

btnNext是被控制的控件

nextHelper = new TextInputUtils(btnNext);

3、添加控制控件

addViews(TextView... view)方法,参数为可变长度参数列表。当参数内的所有控件都满足条件时,被控制的控件的 enable = true.

nextHelper.addViews(etNumber, etCode);

4、释放控件

nextHelper.removeViews();

源码在此

package com.momin.baselib.util;

import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/** * <p>Title: EditTextInputHelper</p> * <p>Description: 编辑框输入监听控制</p> * <p>Copyright: </p> * <p>Company: </p> * * @author Momin * @version 1.0 * @date 2020/9/25 16:03 */

public class TextInputUtils implements TextWatcher {

    /** * 被操作对象 */
    private View targetView;
    /** * 监听集合 */
    private List<TextView> viewSet;

    public TextInputUtils(View view) {
        if (view == null) {
            throw new IllegalArgumentException("The view is empty");
        }

        this.targetView = view;
    }

    /** * 添加 EditText 监听 * @param views 传入单个或多个 TextView / EditText 对象 */
    public void addViews(TextView... views) {
        if (views == null) {
            return;
        }
        if (viewSet == null) {
            viewSet = new ArrayList<>(views.length - 1);
        }
        for (TextView view : views) {
            view.addTextChangedListener(this);
            viewSet.add(view);
        }
        afterTextChanged(null);
    }


    /** * 移除 TextWatcher 监听,避免内存泄漏 */
    public void removeViews() {
        if (viewSet == null) {
            return;
        }
        for (TextView view : viewSet) {
            view.removeTextChangedListener(this);
        }
        viewSet.clear();
        viewSet = null;
    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable editable) {
        if (viewSet == null) {
            return;
        }

        for (TextView view : viewSet) {
            if ("".equals(view.getText().toString())) {
                setEnabled(false);
                return;
            }
        }

        setEnabled(true);
    }

    /** * 设置View的事件 * @param enabled 启用或者禁用View的事件 */
    public void setEnabled(boolean enabled) {
        if (enabled == targetView.isEnabled()) {
            return;
        }
        if (enabled) {
            //启用View的事件
            targetView.setEnabled(true);
        }else {
            //禁用View的事件
            targetView.setEnabled(false);
        }
    }
}

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1

联系我们