1. 程式人生 > >監聽多個edittext內容 改變按鈕顏色

監聽多個edittext內容 改變按鈕顏色

效果如下圖:

當兩個edittext都輸入了內容才改變  "確定"  的顏色


實現:其實就是在用到的時候 呼叫下面工具類的addAlledittext( )方法 把要監聽的edittext都傳進來    然後下面的工具類對傳進來的edittext陣列遍歷設定一個監聽器TextWatcher     在監聽器的onTextChanged()方法中呼叫checkAllEdit()方法進行判斷是否所有edittext都有內容 如果都有內容了 就用介面回撥傳過去一個true  否則就傳false    在那邊我們收到這個boolean值 進行判斷 如果為true 就把 確定 設定為紅色 為false就設定為灰色!  其實挺簡單的  只是寫出來 如果有銀需要用到直接拷貝工具類的程式碼即可  無需自己再寫了!


package cn.hululi.hll.util.wordsort;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;
import cn.hululi.hll.util.IEditTextChangeListener;
/**
 * @author 鹹魚* @time 2016/9/11  12:31
* @desc 監聽et的工具類 */ public class WorksSizeCheckUtil { //釋出作品時候填寫尺寸的監聽器 static IEditTextChangeListener mChangeListener; public static void setChangeListener(IEditTextChangeListener changeListener) { mChangeListener = changeListener; } /** * 檢測輸入框是否都輸入了內容 * 從而改變按鈕的是否可點選 * 以及輸入框後面的
X的可見性,X點選刪除輸入框的內容 */ public static class textChangeListener{ private TextView button; private EditText[] editTexts; public textChangeListener(TextView button){ this.button=button; }
        public textChangeListener addAllEditText(EditText... editTexts){
            this.editTexts=editTexts;
initEditListener();
            return this;
}


        private void initEditListener() {
            Log.i("TAG", "呼叫了遍歷editext的方法");
            for (EditText editText:editTexts){
                editText.addTextChangedListener(new textChange());
}
        }



        /**
         * edit輸入的變化來改變按鈕的是否點選
*/
private class textChange implements TextWatcher {

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

            @Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if (checkAllEdit()){
                    Log.i("TAG", "所有edittext有值了");
mChangeListener.textChange(true);
button.setEnabled(true);
}else {
                    button.setEnabled(false);
Log.i("TAG", "edittext沒值了");
mChangeListener.textChange(false);
}
            }

            @Override
public void afterTextChanged(Editable editable) {
            }
        }

        /**
         * 檢查所有的edit是否輸入了資料
* @return
*/
private boolean checkAllEdit() {
            for (EditText editText:editTexts){
                if (!TextUtils.isEmpty(editText.getText() + "")){
                    continue;
}else {
                    return false;
}
            }
            return true;
}
    }
}

下面就是activity中的程式碼

public class MainActivity extends AppCompatActivity {

    private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText1 = (EditText) findViewById(R.id.et_1);
EditText editText2 = (EditText) findViewById(R.id.et_2);
EditText editText3 = (EditText) findViewById(R.id.et_3);
tv = (TextView) findViewById(R.id.tv);
//1.建立工具類物件 把要改變顏色的tv先傳過去 
WorksSizeCheckUtil.textChangeListener textChangeListener = new WorksSizeCheckUtil.textChangeListener(tv);
//2.把所有要監聽的edittext都新增進去
textChangeListener.addAllEditText(editText1,editText2,editText3);
//3.介面回撥 在這裡拿到boolean變數 根據isHasContent的值決定 tv 應該設定什麼顏色
WorksSizeCheckUtil.setChangeListener(new IEditTextChangeListener() {
            @Override
public void textChange(boolean isHasContent) {
                if(isHasContent){
                    tv.setTextColor(Color.RED);
}else{
                    tv.setTextColor(Color.BLACK);
}
            }
        });
}
}

下面是介面

這樣 在我們所有的editetxtview都有值時 textview會立刻變紅色 否則就是灰色