Android中EditText一秒變身金額輸入框

來源:互聯網
上載者:User

最近做的一個項目需要用到儲值和提現金額,那麼就需要在輸入框中實現帶小數點的金額數字,同時保證小數點後兩位,於是在網上查了一些資料,實現了這樣的功能。

首先,我們需要在布局中EditText中的屬性裡加上這樣一句話:android:inputType=“numberDecimal”,表示輸入的時候只能輸入浮點型的資料。

自訂一個類,在這裡寫功能。

 代碼如下 複製代碼

import android.text.InputFilter;

import android.text.Spanned;
import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* joy on 2015/12/17.

*

* 金額輸入格式

*/

public class EditInputFilter implements InputFilter {

/**

* 最大數字,我們取int型最大值

*/

public static final int MAX_VALUE = 2147483647;

/**

* 小數點後的數位位元

*/

public static final int PONTINT_LENGTH = 2;

Pattern p;

public EditInputFilter(){

p = Pattern.compile(“[0-9]*”);   //除數字外的其他的

}

/**

*  source    新輸入的字串

*  start    新輸入的字串起始下標,一般為0

*  end    新輸入的字串終點下標,一般為source長度-1

*  dest    輸入之前文字框內容

*  dstart    原內容起始座標,一般為0

*  dend    原內容終點座標,一般為dest長度-1

*/

@Override

public CharSequence filter(CharSequence src, int start, int end,

Spanned dest, int dstart, int dend) {

String oldtext =  dest.toString();

System.out.println(oldtext);

//驗證刪除等按鍵

if (“”.equals(src.toString())) {

return null;

}

//驗證非數字或者小數點的情況

Matcher m = p.matcher(src);

if(oldtext.contains(“.”)){

//已經存在小數點的情況下,只能輸入數字

if(!m.matches()){

return null;

}

}else{

//未輸入小數點的情況下,可以輸入小數點和數字

if(!m.matches() && !src.equals(“.”) ){

return null;

}

}

//驗證輸入金額的大小

if(!src.toString().equals(“”)){

double dold = Double.parseDouble(oldtext+src.toString());

if(dold > MAX_VALUE){

return dest.subSequence(dstart, dend);

}else if(dold == MAX_VALUE){

if(src.toString().equals(“.”)){

return dest.subSequence(dstart, dend);

}

}

}

//驗證小數位精度是否正確

if(oldtext.contains(“.”)){

int index = oldtext.indexOf(“.”);

int len = dend – index;

//小數位只能2位

if(len > PONTINT_LENGTH){

CharSequence newText = dest.subSequence(dstart, dend);

return newText;

}

}

return dest.subSequence(dstart, dend) +src.toString();

}

}

如何使用我們自訂的類呢,只需要在相應的Activity中定義EditText 控制項edit_takeout_money;,然後:

InputFilter[] filters = { new EditInputFilter() };

edit_takeout_money.setFilters(filters);

就OK了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.