Android實現EditText輸入金額_Android

來源:互聯網
上載者:User

EditText是Android中一個非常實用的控制項,有很多InputType,可以來達到不同的輸入效果,如下圖:

比如,密碼輸入,數字輸入等等。但是最近在項目中要實現EditText輸入金額,金額的限制因素很多,比如,只能輸入數字和小數點,首位不能輸入0和小數點,小數點後面只能保留兩位等等,這些僅僅用InputType是無法實現的,今天用InputFilter來實現。

1. 首先需要將EditText的InputType設定成如下格式,保證使用者只能輸入小數點和數字

android:inputType="numberDecimal"或者setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL)

2. 自訂InputFilter,代碼如下:

CashierInputFilter.Java

package com.xylpay.utils; import android.text.InputFilter; import android.text.Spanned; import android.text.TextUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; /**  * Created by Jackie on 2016/1/30.  * 過濾使用者輸入只能為金額格式  */ public class CashierInputFilter implements InputFilter {   Pattern mPattern;   //輸入的最大金額   private static final int MAX_VALUE = Integer.MAX_VALUE;   //小數點後的位元   private static final int POINTER_LENGTH = 2;   private static final String POINTER = ".";   private static final String ZERO = "0";   public CashierInputFilter() {     mPattern = Pattern.compile("([0-9]|\\.)*");   }   /**    * @param source  新輸入的字串    * @param start   新輸入的字串起始下標,一般為0    * @param end    新輸入的字串終點下標,一般為source長度-1    * @param dest   輸入之前文字框內容    * @param dstart  原內容起始座標,一般為0    * @param dend   原內容終點座標,一般為dest長度-1    * @return     輸入內容    */   @Override   public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {     String sourceText = source.toString();     String destText = dest.toString();     //驗證刪除等按鍵     if (TextUtils.isEmpty(sourceText)) {       return "";     }     Matcher matcher = mPattern.matcher(source);     //已經輸入小數點的情況下,只能輸入數字     if(destText.contains(POINTER)) {       if (!matcher.matches()) {         return "";       } else {         if (POINTER.equals(source)) { //只能輸入一個小數點           return "";         }       }       //驗證小數點精度,保證小數點後只能輸入兩位       int index = destText.indexOf(POINTER);       int length = dend - index;       if (length > POINTER_LENGTH) {         return dest.subSequence(dstart, dend);       }     } else {       //沒有輸入小數點的情況下,只能輸入小數點和數字,但首位不能輸入小數點和0       if (!matcher.matches()) {         return "";       } else {         if ((POINTER.equals(source) || ZERO.equals(source)) && TextUtils.isEmpty(destText)) {           return "";         }       }     }     //驗證輸入金額的大小     double sumText = Double.parseDouble(destText + sourceText);     if (sumText > MAX_VALUE) {       return dest.subSequence(dstart, dend);     }     return dest.subSequence(dstart, dend) + sourceText;   } }

使用方法如下:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.