來不及解釋了快上車深浮,多個EditText輸入解決方案

在開發(fā)中,我們常常遇到這種情況

我們往往需要的是下面這種效果

但是如果把這些實現(xiàn)的代碼寫在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);
    }

    /**
     * 構造函數(shù)
     *
     * @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監(jiān)聽
     *
     * @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監(jiān)聽,避免內存泄露
     */
    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創(chuàng)建時添加監(jiān)聽

private TextInputHelper mInputHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //創(chuàng)建一個輔助類艇棕,傳入按鈕操作View
    mInputHelper = new TextInputHelper(mButton);
    //可添加一個或者多個EditText蝌戒,當然也可以添加TextView
    mInputHelper.addViews(mEditText1, mEditText2, mEditText3);
}

在Activity銷毀時移除監(jiān)聽(避免內存泄露)

@Override
protected void onDestroy() {
    super.onDestroy();

    //移除引用,避免內存泄露
    mInputHelper.removeViews();
}

需要注意的是這里不單單只是可以添加EditText沼琉,還可以添加TextView北苟,因為EditText是TextView的子類,最后要是覺得好用記得點個贊 ???

Android 技術討論 Q 群:10047167

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末打瘪,一起剝皮案震驚了整個濱河市友鼻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闺骚,老刑警劉巖彩扔,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異葛碧,居然都是意外死亡借杰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門进泼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔗衡,“玉大人纤虽,你說我怎么就攤上這事〗实耄” “怎么了逼纸?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長济蝉。 經(jīng)常有香客問我杰刽,道長,這世上最難降的妖魔是什么王滤? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任贺嫂,我火速辦了婚禮,結果婚禮上雁乡,老公的妹妹穿的比我還像新娘第喳。我一直安慰自己,他們只是感情好踱稍,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布曲饱。 她就那樣靜靜地躺著,像睡著了一般珠月。 火紅的嫁衣襯著肌膚如雪扩淀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天啤挎,我揣著相機與錄音驻谆,去河邊找鬼。 笑死侵浸,一個胖子當著我的面吹牛旺韭,可吹牛的內容都是我干的。 我是一名探鬼主播掏觉,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼区端,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了澳腹?” 一聲冷哼從身側響起织盼,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酱塔,沒想到半個月后沥邻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡羊娃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年唐全,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡邮利,死狀恐怖弥雹,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情延届,我是刑警寧澤剪勿,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站方庭,受9級特大地震影響厕吉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜械念,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一头朱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧订讼,春花似錦髓窜、人聲如沸扇苞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳖敷。三九已至脖苏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間定踱,已是汗流浹背棍潘。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崖媚,地道東北人亦歉。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像畅哑,于是被迫代替她去往敵國和親肴楷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,849評論 25 707
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程荠呐,因...
    小菜c閱讀 6,375評論 0 17
  • 資源來自于網(wǎng)絡赛蔫,侵刪。需要PDF格式的請直接發(fā)私信泥张。
    何處生才閱讀 2,022評論 2 23
  • 清明小長假在家躺了兩天后呵恢,我如約的再一次失眠了…… 曾經(jīng)被失眠折磨到要瘋的我,靠酒精入眠媚创,好像癮君子一樣渗钉。有段時間...
    千年的小狐閱讀 228評論 0 0
  • 林間徘徊著一縷風 夾雜著細雨和薄霧 飄過,滿地落紅 鑲滿黯淡的露水 烏鳴钞钙,若狂若悲 曉夢已消碎 夢碎了 被黎明的蘇...
    何四金mile閱讀 102評論 0 1