最近專案要實現如下的密碼框樣式(實現效果圖如下)
先看單個edittext xml配置的屬性:
只允許最多輸入乙個字元
控制項初始化:
private void initview()
用textwatcher 進行 焦點後移處理:
每個edittext 有內容輸入後,通過index把焦點後移一位,然後傳送命令,掃瞄輸入框是否都有輸入,若都有,則判斷密碼的有效性。
class mytextchangewatcher implements textwatcher
@override
public void aftertextchanged(editable s) else
setflag(false, index);// 對應標誌位 置 1
//有內容輸入,判斷密碼是否輸入ok
handler.sendemptymessage(1);
} else
} @override
public void beforetextchanged(charsequence s, int start, int count,
int after)
@override
public void ontextchanged(charsequence s, int start, int before,
int count)
}
掃瞄 輸入框與密碼判斷:
private handler handler = new handler() else
} else
//掃瞄輸入框,是否全都已輸入
if (scanedittexthasnull())
//判斷 密碼有效性
if (judgepassword()) else
};};
迴圈掃瞄,有空,立即跳出
/**
* 掃瞄edittext 是否存在沒有輸入的
* @return true 有空, false 都填寫值了
*/private boolean scanedittexthasnull()
} return false;
}
單個字元,迴圈對比。
/**
* 判斷密碼是否正確
*/private boolean judgepassword()
} return true;
}
用onkeylistener 焦點前移:
當前edittext 內容為空,並且del鍵 按下,焦點前移
/**
* 監聽刪除鍵 前移焦點
*/private onkeylistener keylistener = new onkeylistener()
return false;
} };
tag 與edittext 對映
private edittext getedittextfromindex(int index)
return null;
}
關於密碼框是否有輸入值,除了迴圈掃瞄外,還用個人覺得更輕量級一些的方法做了另外一種實現:通過標識位0 和1 來判斷,指定位置對應的edittext是否有輸入值 :1,有。
設定 指定標誌位
/**
* 對指定位 進行位操作
* * @param isnull
* true:當前值為null ,清零。false:有值,該標誌位 給1.
* @param index
* 標誌位index
*/private void setflag(boolean isnull, int index) else
}
判斷是否都已輸入值
// 判斷 是否有未輸入的
private boolean checkhasnull()
return true;
}
標識位 具體變化設定,參見 上面的mytextchangewatcher類中的aftertextchanged方法。 程式設計實現連續輸的格式輸出
程式設計實現 乙個整型陣列如 1,2,3,5,6,2,3,4,5,6,則輸出 1 3,5,6,2 6 include void count data int a,int len else if flag 1 flag 1,表示陣列中相鄰的有兩個連續的數 if flag 1 flag 1,表示陣列中相...
連續bezier曲線的實現
一系列的座標點,劃出一條平滑的曲線 基本上大部分繪圖工具都實現了3次bezier曲線,4個點確定一條3次bezier曲線。以html5中的canvas為例 let ctx canvas.getcontex 2d ctx.moveto 20,20 曲線起點 fom ctx.beziercurveto ...
安卓開發 實現監聽EditText的文字變化操作
我們有時會有這樣的需求,就是能夠時刻監聽edittext的文字變化,即改變了乙個字元都能夠監聽。實現如下 在activity中為edittext新增監聽,edittext.addtextchangedlistener new textwatcher override public void onte...