用EditText實現的 連續輸入的密碼框

2021-06-19 17:46:47 字數 2379 閱讀 8102

最近專案要實現如下的密碼框樣式(實現效果圖如下)

先看單個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...