来不及解释了快上车,多个EditText输入解决方案

0
回复
340
查看
[复制链接]

1

主题

1

帖子

10

安币

初级码农

Rank: 1

发表于 2019-1-28 17:55:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-976692-79458.html

## 在开发中,我们常常遇到这种情况![](//upload-images.jianshu.io/upload_images/6038844-d83c439409a573d6.jpg)## 我们往往需要的是下面这种效果![](//upload-images.jianshu.io/upload_images/6038844-6e59a98e991606f2.gif)## 但是如果把这些实现的代码写在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;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    //创建一个辅助类,传入按钮操作View    mInputHelper = new TextInputHelper(mButton);    //可添加一个或者多个EditText,当然也可以添加TextView    mInputHelper.addViews(mEditText1, mEditText2, mEditText3);}```在Activity销毁时移除监听(避免内存泄露)```@Overrideprotected void onDestroy() {    super.onDestroy();    //移除引用,避免内存泄露    mInputHelper.removeViews();}```需要注意的是这里不单单只是可以添加EditText,还可以添加TextView,因为EditText是TextView的子类,最后要是觉得好用记得点个赞。  继续阅读全文



想在安卓巴士找到更多优质博文,可移步博客区

如果对本篇文章感兴趣,请前往,
原文地址:
http://www.apkbus.com/blog-976692-79458.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )