一:要實現這個效果也不是很復雜,只需要設置輸入框輸入的字符類型、設置InputFilter、設置輸入變化監聽即可。下面直接來看代碼吧….
二:new 一個class extends AppCompatEditText并寫上一個初始化函數
private void init() { //設置輸入框允許輸入的類型(正則) //對應的布局屬性是--->android:digits="0123456789." setKeyListener(DigitsKeyListener.getInstance("0123456789.")); //設置輸入字符 setFilters(new InputFilter[]{inputFilter}); addTextChangedListener(this);}三:inputFilter來分割小數后的保留位數
private InputFilter inputFilter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { // 刪除等特殊字符,直接返回 if (TextUtils.isEmpty(source)) { return null; } String dValue = dest.toString(); String[] splitArray = dValue.split("//."); if (splitArray.length > 1) { String dotValue = splitArray[1]; // 2 表示輸入框的小數位數 int diff = dotValue.length() + 1 - 2; if (diff > 0) { return source.subSequence(start, end - diff); } } return null; }};如果你想保留其它位數的小數,只需要把上面的2改成你需要的位數即可。
三:輸入框輸入變化的監聽,來處理小數點不能出現在第一位&&不能出現多個
@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) { //如果輸入框為空則不處理 if (TextUtils.isEmpty(s)) { return; } //第一個字符不為小數點 if (s.length() == 1 && s.toString().equals(".")) { setText(""); return; } int counter = counter(s.toString(), '.'); if (counter > 1) { //小數點第一次出現的位置 int index = s.toString().indexOf('.'); setText(s.subSequence(0, index + 1)); } setSelection(getText().toString().length());}四:統計一個字符在字符串中出現的次數
/** * 統計一個字符在字符串中出現的次數 * * @param s 字符串 * @param c 字符 * @return 數量 */public int counter(String s, char c) { int count = 0; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == c) { count++; } } return count;}就這幾步就可以輕松實現了,想看源碼的點擊這里哦源碼鏈接
以上所述是小編給大家介紹的Android金額輸入框只允許輸入小數點后兩位效果,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
新聞熱點
疑難解答