Adroid edittext 輸入小數時只能輸入到小數點後的固定位數

smile_鄺野發表於2020-10-19

android 開發中遇到的關於edittext輸入型別為數字時如何在xml中編輯可輸入的固定的小數位數,對於此問題本人解決方案如下

一、新建NumberEditText 繼承 EditText 具體如下

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.widget.EditText;

import com.ljy.mzdb.liangcheng.R;

/**

  • @author:Mr.Zan

  • @date: 2020/10/16 17:44

  • email:644962006@qq.com

  • detail:數字輸入,並限制小數點後位數
    */
    @SuppressLint(“AppCompatCustomView”)
    public class NumberEditText extends EditText {
    private int maxDecimalPoint=2;
    public NumberEditText(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    }

    public NumberEditText(Context context, AttributeSet attrs) {
    super(context,attrs);
    changeText(context,attrs);
    setTextWatcher();
    }

    public void changeText(Context context, AttributeSet attrs) {

     TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.NumberEditText);
     maxDecimalPoint = array.getInt(R.styleable.NumberEditText_maxDecimalPoint, 2);
     array.recycle();
    

    }
    public void setTextWatcher() {
    addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

     	}
     	@Override
     	public void onTextChanged(CharSequence s, int start, int before, int count) {
     		if (start >= 0) {//從一輸入就開始判斷,
     				try {
     					if (s.toString().startsWith(".")){
     						setText("0.");
     						setSelection(s.length()+1);
     					}else if (s.toString().contains(".")&&(s.toString().length()-s.toString().indexOf(".")>(maxDecimalPoint+1))){
     						setText(s.toString().substring(0,s.length()-1));
     						setSelection(s.length()-1);
     					}
     				} catch (Exception e) {
     					e.printStackTrace();
     				}
    
     				return;
     			}
    
     	}
    
     	@Override
     	public void afterTextChanged(Editable s) {
    
     	}
     });
    

    }

}

二、在res 下的velues 資料夾下新增 attrs.xml

在該檔案中新增如下程式碼

  • <declare-styleable name="NumberEditText">
    <attr name="maxDecimalPoint" format="integer" />
     </declare-styleable>
    
三、使用方法
  • 在佈局檔案中新增 <com.*****.NumberEditText
  • 設定輸入型別 android:inputType=“numberDecimal”
  • 預設保留2位小數 需要修改為其他的位數只需新增 app:maxDecimalPoint=“n” 需要保留幾位小數 n輸入幾就可以了

相關文章