對EditText拓展完成輸入內容分隔處理

2021-06-27 19:29:24 字數 2462 閱讀 1732

今天沒有時間看原始碼了。就寫一篇今天的工作記錄吧,為了解決乙個小功能,就對android的edittext作了功能上的拓展。

首先說下遇到的需求,在edittext中對使用者輸入的內容進行一次「重新排版」,即沒四個字串分為一組,每一組用空格隔開:核心原始碼如下:

/**

* 文字改變監聽

* @author sunny

* */

private class didatextwatcher implements textwatcher

@override

public void ontextchanged(charsequence s, int start, int before,

int count)

//如果包含空格,就清除

char chars = s.tostring().trim().replace(" ", "").tochararray();

len = chars.length;

//每4個分組,加上空格合成新的字串

stringbuffer sb = new stringbuffer();

//注意,一定要加上這乙個判斷,否則會陷入死迴圈,因為我們在這裡改變了字串s,這個事件會一直被監聽到

//所以,只有當我們輸入的字串不在改變的時候就不在監聽到了

if(len != tempcount)

/*** 設定允許輸入的最大長度

* @param textmaxlength

*/public void settextmaxlength(integer textmaxlength)

/*** 設定分割符號,是空格還是"-"還是其他符號,預設的是空格

* @param delimiter

*/public void setdelimiter(string delimiter)

/*** 設定分割時每組的字元數,預設的是4個

* @param maxlength

*/public void setmaxlength(integer maxlength)

/*** 一次性設定分割

* @param isdivision 是否分割

* @param maxlength 分割的每組數目

* @param delimiter 分割符號

*/public void setdivision(integer maxlength,string delimiter)

上面的**正如大家所見,我提供了幾個開放的屬性讓使用者擁有更多的自主權,比如使用者是否要將其輸入的文字隱藏,即密碼框,但是和edittext的密碼框不一樣哈!而且提供了分割的字串數目。如果不需要分割,呼叫方法時傳入乙個「」引數就可以了。雖然如此,還不夠完善,因為此類控制項是直接繼承edittext完成的,沒有實現定製乙個個性化的編輯框。還有點時間可以順便寫乙個復合控制項。接下來就將此類改變下讓其繼承linearlayout類來定製個性化的edittext,還是另外開乙個類來寫吧。

首先要明確乙個概念,即復合控制項和自定義檢視是不一樣的,前者是我們不需要去重寫那些onmeasure()、onlayout()、ondraw()方法的。我們只需要繼承乙個寫乙個xml布局檔案將已有的控制項組合起來,然後編寫乙個類繼承linearlayou或其他容器類,進行填充即可,然後在該類裡面也可以處理相應的想要拓展的功能。而後者是需要我們重寫一系列方法,完全重繪乙個檢視的。下面我們基於復合檢視來寫乙個個性化的edittext,首先是其xml布局檔案:

<?xml version="1.0" encoding="utf-8"?>

public didaedittextfromlinearlayout(context context,attributeset attrs)

在其構造方法中進行填充,為了省篇幅就不把所有的**貼出來了,裡面冗雜**略多,講主要的。

其次提供乙個init()方法如下:

public void init()

/**

* 設定textview背景,如果不設定就是我提供的原

* @param tempdrable 資源,引數形式為:r.drable.image_name

*/public void settextviewimage(int tempdrable)

<?xml version="1.0" encoding="utf-8"?>

沒啥好說的,要把布局徹底搞熟練才行,這裡需要注意的就是引用復合控制項類時,要寫類全名,不然在反射建立該物件會出錯。

哦、忘記上效果圖了啊。。用手機模擬的,怎麼上效果圖啊!鄙人愚昧,直接將我用ps做的效果圖哪來填充好了:

至此,今天的日誌完畢。

如何判斷Edittext輸入完成

分享乙個最近做的專案中遇到的問題 需要監聽使用者輸入完畢 然後的操作。想了很多辦法 最後發現下面的 辦法還是比較符合 邏輯的。主要就是通過時間的間隔來判斷可能使用者輸入完畢。大家可以根據實際情況 自行修改,中已經進行了注釋。很明確。希望能幫到大家 edittexti 設定 文字變化監聽 editte...

EditText限制文字輸入

private final textwatcher mtextwatcher new textwatcher public void ontextchanged charsequence s,int start,int before,int count public void aftertextch...

edittext輸入型別總結

總結一下edit 輸入型別總結 android inputtype none 隨便吧 android inputtype text 文字型別,多為大寫 小寫和數字符號 android inputtype textcapcharacters 字母大寫 android inputtype textcap...