在Android开发中有一种需求,比如姓名,电话,性别,地址这几种必填信息填写完了后提交按钮才变成高亮,提示可以提交了,其他的信息非必填所以不用管了.你们是如何做这个小功能的? 下面是我的做法.
EditText mName;
EditText mPhone;
EditText mSex;
Button mBtn;
private static final int FLAG_NAME = 0x1;
private static final int FLAG_MOBILE = 0x2;
private static final int FLAG_SEX = 0x4;
private static final int FLAG_OK = 0x7;
//此处省略初始化......
//给需要的EditText增加内容观察者
private void editTextAddWitch() {
mName.addTextChangedListener(new 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 void afterTextChanged(Editable s) {
//其他的EditText也如此,修改FLAG_NAME为相应的标志.
afterInput(FLAG_NAME, !TextUtils.isEmpty(s.toString()));
}
});
//省略其他的内容监听
}
/**
* & ~都是位操作运算符&是与运算,规定 1&1=1 1&0=0 0&1=0 0&0=0,
* ~是取反运算,它的作用是将二进制数中的1转换成0,把0转换成1。
* 例如~11010=00101=101而 a&=~b的意思就是 a= a & (~b)
* |是按位或操作,就是只要有一个1就是1,两个都是0才是0
* @param flag
* @param isValid
*/
private void afterInput(int flag, boolean isValid) {
if (isValid) {
mSubmitFlag |= flag;
} else {
mSubmitFlag &= ~flag;
}
mBtn.setEnabled(mSubmitFlag == FLAG_FINISHED);
}
0x1 == 0001
0x2 == 0010
0x4 == 0100
三者或 == 0111 == 0x7