在應用中,涉及到支付介面一般都會採用自定義的控制項,採用點號佔位符來代替輸入的密碼,保護使用者的隱私。很顯然,這是一種輸入框。針對這種場景,最直接的實現是採用多個輸入框來實現的,這可能是最醜陋的實現了。筆者在這裡介紹一種通過自定義控制項的方式來實現。
實現自定義控制項的方式大致有繼承和組合兩種方式。此處,場景單一,需求簡單,如果利用組合來實現,勢必要引入viewgroup
,增加控制項的層級,因此,這裡我們選擇繼承系統原生的edittext
來實現,通過乙個控制項來解決問題。安卓原生的輸入框控制項edittext
其實是一款很強大的控制項,我們可以對之進行簡單的改造,就可實現上文所說的密碼框輸入功能。
在使用系統原生的edittext
的時,我們需要解決幾個問題:
隱藏系統控制項的游標
隱藏系統控制項的下劃線
隱藏系統的文字輸入內容
控制輸入的最大長度
點號佔位符和方塊的繪製
這些問題,有些是由於系統edittext
的特性引入的,有些是控制項的需求,解決好這些問題,控制項的實現就變得很簡單。
首先,我們看下如何解決以上提出的5個問題。
隱藏系統控制項的游標通過
edittext
的方法來控制
// 隱藏游標
setcursorvisible
(false
);
隱藏系統控制項的下劃線通過設定
edittext
的背景為空來實現
//設定背景為null,去掉下劃線
setbackground
(null)
;
隱藏系統的文字輸入內容這裡需要去取下巧,通過設定文字大小為0來實現
// 設定文字帶大小為0
settextsize(0
);
控制輸入的最大長度這裡需要通過監聽文字框的內容長度,來及時更新輸入框的文字內容,確保文字內容不超過密碼的長度,這裡,我們通過重寫
ontextchanged
方法來實現的,主要是監聽當前文字長度,對之進行實時修改。
@override
protected
void
ontextchanged
(charsequence text,
int start,
int lengthbefore,
int lengthafter)
}
在這裡,我們通過gettext
方法獲取到當前的文字相關的介面物件editable
,通過判定其文字的長度,來對它超過長度的文字進行刪除,從而達到控制文字輸入最大長度的目的。
點號佔位符和方塊的繪製點號佔位符和方塊是需要控制項來繪製的,這裡就需要重寫
ondraw
方法,這裡,我們需要幾個引數,乙個是密碼的最大長度mtextlength
,乙個控制項的寬和高。有了這些,我們就可以計算每個格仔的寬度,從而進行邊框,方塊格仔,點號佔位符的繪製,大致邏輯可參考下面**:
@override
protected
void
ondraw
(canvas canvas)
editable editable =
gettext()
;if(editable != null)
}}
到這裡,其實最主要的工作都已經結束了。接下來,是對控制項的補充。
重寫設定文字屬性的方法,確保文字大小為0
@override
public
void
settextsize
(float size)
@override
public
void
settextsize
(int unit,
float size)
@override
public
void
settextcolor
(int color)
新增設定密碼長度的方法這需要注意一下,當當前密碼框已經有填充內容時,如果減少格仔的數量,需要對當前的文字進行適當的修改。
public
void
setlength
(int len)
postinvalidate()
;}
到此,整個控制項才能說設計完畢了。我們來看下效果。
可以看到,跟我們平常看到的密碼框控制項基本是一致的。
自定義控制項是一件很有意思的事情,通過自定義控制項,你可以發現系統控制項很多精妙的內容,那些看起來很簡單的控制項,其實包羅了很多精湛的編碼技巧。通過自定義控制項,可以讓安卓開發人員對原始碼中view
的特性有更深的理解。讓開發人員的思維更加嚴謹。
iOS仿支付寶輸入支付密碼框
類似於下圖這樣的輸入框,並實現其功能 實現這個頁面,其中輸入框部分為核心問題,僅針對輸入框部分進行解讀 下面 只看其功能不看其位置資訊 toptextfield uitextfield alloc initwithframe cgrectmake 0,wayline.bottom,passview....
自定義view密碼框等同於支付寶支付密碼框
android 自定義view 密碼框 例子 遵從準則 暴露您view中所有影響可見外觀的屬性或者行為。通過xml新增和設定樣式 通過元素的屬性來控制其外觀和行為,支援和重要事件交流的事件 可以通過xml定義影響外邊和行為的屬性如下 邊框圓角值,邊框顏色,分割線顏色,邊框寬度,密碼長度,密碼大小,密...
高仿微信支付的密碼框
首先從布局說起,我將布局分成乙個linearlayout,平分成了6份,每乙個裡邊是乙個imageview,中間用textview分割開。然後再蓋上乙個edittext,以供調出鍵盤,盛放輸入的內容,並監聽輸入的長度來控制顯示的個數。大致思路就是這樣,下邊來看實現過程。1 布局 2 實現 實現很簡單...