android EditText 根据光标进行添加和删除操作

如果对EditText进行编辑时不适用系统键盘 就要使用这个逻辑了。

上代码~~~

public class EditTextUtils {

    /**
     * 输入框删除逻辑 可以根据光标的选择进行删除了
     */
    public static void deleteTextSelect(EditText editText) {

        if (editText.hasFocus()) {

            String num = editText.getText().toString().trim();

            int index = editText.getSelectionStart() - 1;

            if (num.length() > 0
                    && editText.getSelectionStart() != 0) {
                StringBuffer sb = new StringBuffer(num);
                sb.replace(index, index + 1, "");
                editText.setText(sb.toString());
                editText.setSelection(index);
                sb.setLength(0);
            }

        }

    }

    /**
     * 输入框的输入逻辑 可以根据光标的选择输入了
     *
     * @param text  要插入的内容
     */
    public static void inputText(EditText editText, String text) {

        if (editText.hasFocus()) {

            String num = editText.getText().toString().trim();

            int index = editText.getSelectionStart();

            if (TextUtils.isEmpty(num)) {
                editText.setText(text);
            } else if (num.length() == index) {
                editText.setText(num + text);
            } else {
                // 判断下,如果输入已经达到了最大值,不做操作。否则会把已输入的内容吃掉
                if (getMaxLength(editText) == num.length())
                    return;

                StringBuffer sb = new StringBuffer(num);
                sb.replace(index, index + 1, text + sb.substring(index, index + 1));
                editText.setText(sb.toString());
                sb.setLength(0);

            }

            if (index > num.length() - 1)
                editText.setSelection(editText.length());
            else
                editText.setSelection(index + 1);

        }

    }

    /**
     * 获取  输入框的maxLength 
     *
     * @param et
     * @return
     */
    public static int getMaxLength(EditText et) {

        int length = 0;

        try {

            InputFilter[] inputFilters = et.getFilters();

            for (InputFilter filter : inputFilters) {

                Class<?> c = filter.getClass();

                if (c.getName().equals("android.text.InputFilter$LengthFilter")) {

                    Field[] f = c.getDeclaredFields();

                    for (Field field : f) {

                        if (field.getName().equals("mMax")) {

                            field.setAccessible(true);

                            length = (Integer) field.get(filter);

                        }

                    }

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

        return length;

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值