EditText过滤器 控制输入 数字

package com.txooo.utils;

import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.NumberKeyListener;
import android.widget.EditText;

import com.txooo.ui.ToastUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by 徐嘉健
 * EditText过滤工具类
 */

public class EditFilters {
    /**
     * 保留2位小数  开头为0 自动加入小数
     *
     * @param editText
     */
    public static void EdFilters(EditText editText) {
        editText.setFilters(new InputFilter[]{new InputFilter() {
            int decimalNumber = 2;//小数点后保留位数

            @Override
            //source:即将输入的内容 dest:原来输入的内容
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                String sourceContent = source.toString();
                String lastInputContent = dest.toString();

                //验证删除等按键
                if (TextUtils.isEmpty(sourceContent)) {
                    return "";
                }
                //以小数点"."开头,默认为设置为“0.”开头
                if (sourceContent.equals(".") && lastInputContent.length() == 0) {
                    return "0.";
                }
                //输入“0”,默认设置为以"0."开头
                if (sourceContent.equals("0") && lastInputContent.length() == 0) {
                    return "0.";
                }
                //小数点后保留两位
                if (lastInputContent.contains(".")) {
                    int index = lastInputContent.indexOf(".");
                    if (dend - index >= decimalNumber + 1) {
                        return "";
                    }
                }
                return null;
            }
        }});

    }

    /**
     * 设置保留 num 位小数
     *
     * @param editText
     * @param num
     */
    public static void EdFilters(EditText editText, final int num) {
        editText.setFilters(new InputFilter[]{new InputFilter() {
            int decimalNumber = num;//小数点后保留位数
            @Override
            //source:即将输入的内容 dest:原来输入的内容
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                String sourceContent = source.toString();
                String lastInputContent = dest.toString();

                //验证删除等按键
                if (TextUtils.isEmpty(sourceContent)) {
                    return "";
                }
                //以小数点"."开头,默认为设置为“0.”开头
                if (sourceContent.equals(".") && lastInputContent.length() == 0) {
                    return "0.";
                }
                //输入“0”,默认设置为以"0."开头
                if (sourceContent.equals("0") && lastInputContent.length() == 0) {
                    return "0.";
                }
                //小数点后保留两位
                if (lastInputContent.contains(".")) {
                    int index = lastInputContent.indexOf(".");
                    if (dend - index >= decimalNumber + 1) {
                        return "";
                    }
                }
                return null;
            }
        }});

    }


    /**
     * 整型数字开头为0  输入其他时0自动删除   在EditText监听中调取此方法即可
     *
     * @param editText
     */
    public static void EdListener(final EditText editText, Editable editable) {
        if (TextUtils.isEmpty(editable.toString())) {
            editText.setText("0");
            editText.setSelection(1);
        }
        if (editable.toString().length() >= 2 && editable.toString().startsWith("0")) {
            editText.setText(editable.toString().substring(1));
            editText.setSelection(editable.toString().length() - 1);
        }
    }

    /**
     * EditTextView光标默认在最后
     *
     * @param editText
     * @param length
     */
    public static void EdSelection(EditText editText, int length) {
        editText.setSelection(length);
    }

    /**
     * EditTextView 默认不获取焦点
     */
    public static void EdNoFocusable(EditText editText, boolean isFocusable, boolean isFocusableInTouchMode) {
        editText.setFocusable(isFocusable);
        editText.setFocusableInTouchMode(isFocusableInTouchMode);
    }

    /**
     * EditTextView
     * 只能输入整数
     */
    public static void IntegerNum(EditText editText) {
        editText.setKeyListener(new NumberKeyListener() {
            @Override
            protected char[] getAcceptedChars() {
                char[] numberChars = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
                return numberChars;
            }

            @Override
            public int getInputType() {
                return android.text.InputType.TYPE_CLASS_PHONE;
            }
        });
    }


    /**
     * 禁止输入表情符号
     */
    public static void EdNoExpression(EditText edit_name) {
        InputFilter inputFilter = new InputFilter() {
            Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
                    Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);

            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                Matcher emojiMatcher = emoji.matcher(source);
                if (emojiMatcher.find()) {
                    //                    Toast.makeText(MainActivity.this,"不支持输入表情", 0).show();
                    ToastUtils.showToast("不支持输入表情");
                    return "";
                }
                return null;
            }
        };
        //给editText设置filter
        edit_name.setFilters(new InputFilter[]{inputFilter, new InputFilter.LengthFilter(12)});
    }

/**
 * 这样屏蔽的表情符号肯定还是不能够百分之百的屏蔽完全的。
 * 所以最后我们只能选择让用户填写英文,汉字,和数字了。
 *  下面是过滤的代码
 */

//    InputFilter inputFilter=new InputFilter() {
//
//        Pattern pattern = Pattern.compile("[^a-zA-Z0-9\\u4E00-\\u9FA5_]");
//        @Override
//        public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
//            Matcher matcher=  pattern.matcher(charSequence);
//            if(!matcher.find()){
//                return null;
//            }else{
//                MyToast.showText("只能输入汉字,英文,数字");
//                return "";
//            }
//
//        }
//    };
    //设置去除小数点后多余的0
    public static String subZeroAndDot(String s) {
    if (s.indexOf(".") > 0) {
        s = s.replaceAll("0+?$", "");//去掉多余的0
        s = s.replaceAll("[.]$", "");//如最后一位是.则去掉
    }
    return s;
}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值