android 限制EditText输入数字的范围大小
16lz
2021-01-26
一,要想限制EditText的输入大小,经过学习和测试;最好是创建自己的EditText(当然是继承的)
public class DecimalEditText extends android.support.v7.widget.AppCompatEditText { /** * 保留小数点前多少位,默认三位,既到千位 */ private int mDecimalStarNumber = 3; /** * 保留小数点后多少位,默认两位 */ private int mDecimalEndNumber = 2 ; public DecimalEditText(Context context) { this(context, null); } public DecimalEditText(Context context, AttributeSet attrs) { this(context, attrs, R.attr.editTextStyle); } public DecimalEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DecimalEditText); mDecimalStarNumber = typedArray.getInt(R.styleable.DecimalEditText_decimalStarNumber, mDecimalStarNumber); mDecimalEndNumber = typedArray.getInt(R.styleable.DecimalEditText_decimalEndNumber, mDecimalEndNumber); typedArray.recycle(); init(); } /** * 初始化 */ private void init() { setFilters(new InputFilter[]{new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { String lastInputContent = dest.toString(); LogUtils.d("source->" + source + "--start->" + start + " " + "--lastInputContent->" + lastInputContent + "--dstart->" + dstart + "--dend->" + dend); if (source.equals(".") && lastInputContent.length() == 0) { return "0."; } if (!source.equals(".") && !source.equals("") && lastInputContent.equals("0")) { return "."; } if (source.equals(".") && lastInputContent.contains(".")) { return ""; } if (lastInputContent.contains(".")) { int index = lastInputContent.indexOf("."); if (dend - index >= mDecimalEndNumber + 1) { return ""; } } else { if (!source.equals(".") && lastInputContent.length() >= mDecimalStarNumber) { return ""; } } return null; } }}); } public int getDecimalStarNumber() { return mDecimalStarNumber; } public void setDecimalStarNumber(int decimalStarNumber) { mDecimalStarNumber = decimalStarNumber; } public int getDecimalEndNumber() { return mDecimalEndNumber; } public void setDecimalEndNumber(int decimalEndNumber) { mDecimalEndNumber = decimalEndNumber; }}
二,对应的属性
三,对应要实现的功能,Activity就非常简单了
class Main17Activity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main17) }}
四,对应布局为
<?xml version="1.0" encoding="utf-8"?>
更多相关文章
- android的edittext默认不获得焦点
- React Navigation-StackNavigator
- android开发之修改ListView默认滑动条样式
- 在 android 里 常用的 默认开关的 意义
- android 如何替换系统的默认静态壁纸?
- android adb录屏命令
- [Android] 修改Android(安卓)Virtual Device Manager 创建虚拟机
- 记录博客“参考网站”专栏源码
- android 开发文档翻译