我們知道edittext能指定輸入字符類型,這次我們就來了解下在數字模式下的一些顯示控制輸入的效果
1.限制輸入數字
android:inputType="number|numberDecimal"
2.設置edittext監聽
et_denounce_content.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 1 } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 2 } @Override public void afterTextChanged(Editable editable) { 3 } });
1 2 3 分別為改變之前、文字改變、改變之后 我怕們需要在onTextChanged()回調的方法中實現我們的功能
//刪除.后面超過兩位的數字
適用於保留兩位小數
if (s.toString().contains(".")) { if (s.length() - 1 - s.toString().indexOf(".") > 1) { s = s.toString().subSequence(0, s.toString().indexOf(".") + 2); et_denounce_content.setText(s); et_denounce_content.setSelection(s.length()); } }
// 如果輸入的數字大於9則強制改為9
適用於限制10以下的數字輸入
if (!s.toString().trim().substring(0).equals(".") && !NullUtil.isStringEmpty(s.toString().trim()) &&UnitSociax.stringParseDouble(s.toString().trim())>=10) { et_denounce_content.setText("9"); et_denounce_content.setSelection(1); }
// 如果輸入的數字小於1則強制改為1
適用於大於1的數字輸入
if (!s.toString().trim().substring(0).equals(".") && !NullUtil.isStringEmpty(s.toString().trim()) &&UnitSociax.stringParseDouble(s.toString().trim())<1) { et_denounce_content.setText("1"); et_denounce_content.setSelection(1); }
//如果.在起始位置,則起始位置自動補某些數字這里用X代替
if (s.toString().trim().substring(0).equals(".")) { s = "X" + s; et_denounce_content.setText(s); et_denounce_content.setSelection(2); }
//如果起始位置為0並且第二位跟的不是".",則無法后續輸入
適用於小數小於1的操作
if (s.toString().startsWith("0") && s.toString().trim().length() > 1) { if (!s.toString().substring(1, 2).equals(".")) { et_denounce_content.setText(s.subSequence(0, 1)); et_denounce_content.setSelection(1); return; } }
以上條件組合使用來實現自己的效果。
注意:在處理數字的室友注意類型轉換異常的問題,判斷.位置從而知道現在的數字是否為有效數字
!s.toString().trim().substring(0).equals(".")
by:磊磊tua