当前位置: 代码迷 >> 综合 >> Adroid edittext 输入小数时只能输入到小数点后的固定位数
  详细解决方案

Adroid edittext 输入小数时只能输入到小数点后的固定位数

热度:95   发布时间:2024-03-06 05:11:45.0

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) {

     	}@Overridepublic 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;}}@Overridepublic 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输入几就可以了
  相关解决方案