輕鬆實現支付介面密碼框控制項

2021-10-06 02:17:09 字數 2707 閱讀 4385

在應用中,涉及到支付介面一般都會採用自定義的控制項,採用點號佔位符來代替輸入的密碼,保護使用者的隱私。很顯然,這是一種輸入框。針對這種場景,最直接的實現是採用多個輸入框來實現的,這可能是最醜陋的實現了。筆者在這裡介紹一種通過自定義控制項的方式來實現。

實現自定義控制項的方式大致有繼承和組合兩種方式。此處,場景單一,需求簡單,如果利用組合來實現,勢必要引入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 實現 實現很簡單...