android開發,一個帶有正則匹配的EditText

XML 打醬油的小李子 打醬油的小李子 2017-09-02

作者博客

http://www.jianshu.com/u/679b178482a6

源碼地址

https://github.com/xiaoniu/WarnningEditText

先上效果:

android開發,一個帶有正則匹配的EditText

說明:

圖中的EditText能夠在失去焦點後驗證輸入框中的文本是否與正則表達式匹配,這裡我設置的是5位整數(\d{5}),當輸入110時,不匹配,邊框變紅並抖動,文本清除(gif中白色文本是因為錄製的問題,實際文本已清除);輸入12306,匹配,邊框變綠。

實現方式

繼承EditText,實現構造方法

注意構造方法中要傳入官方的屬性值,否則很多EditText屬性不能在XML裡面定義,並且EditText獲取焦點後不會彈出軟鍵盤。

android開發,一個帶有正則匹配的EditText

重寫onDraw,繪製邊框

注意邊框的顏色不要設置常量

android開發,一個帶有正則匹配的EditText

重寫onFocusChanged,監聽焦點變化

獲取焦點後,邊框就設置為默認的顏色(灰色),失去焦點後,會判斷是否匹配正則表達式。

android開發,一個帶有正則匹配的EditText

創建接口

創建一個OnInputMatchListener的接口,內含onInputWrong和onInputCorrect兩個抽象方法,分別在判斷文本不匹配正則表達式和匹配表達式時回調,回調地址在上面的代碼中。

public interface OnInputMatchListener {

void onInputWrong();

void onInputCorrect();

}

要注意的是:

  1. android:paddingLeft="10dp"讓文本不是從左邊框開始,而是左邊框靠左一點。

android開發,一個帶有正則匹配的EditText

  1. 組件的父佈局可以加上

 android:focusable="true"

這樣可以避免EditText默認獲取焦點

3.重中之重:要加上android:background="@null"

我們知道android:background="@null"可以去掉EditText默認樣式的下劃線:

android開發,一個帶有正則匹配的EditText

但在我自定義EditText的時候,我的邊框是根據組件的寬高貼著邊緣畫的,當組件高度大於42dp時,一切正常:

android開發,一個帶有正則匹配的EditText

當高度小於42時,比如30dp,邊框上部就會缺失,或者說邊框繪製

就會從組件外部開始:

android開發,一個帶有正則匹配的EditText

看到最後,點個贊分享一下,支持下咯!

android開發,一個帶有正則匹配的EditText

相關推薦

推薦中...