Android中输入框输入的数字大于2时只能显示2

126 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

当时有个需求,租车数量达到2就不能在加了,一直点击加号也只能显示2,一共有两种方法可以解决这个问题。 下面分别对这两种方法做了解释。

第一种:

count.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence pCharSequence, int pI, int pI1, int pI2) {

            }

            @Override
            public void onTextChanged(CharSequence pCharSequence, int pI, int pI1, int pI2) {
                for (int i = 0; i < pCharSequence.toString().length(); i++) {
                    char c = pCharSequence.toString().charAt(i);
                    Integer integer = Integer.valueOf(c + "");
                    if (integer > 2) {
                        count.setText(2 + "");
                        //toast在屏幕中间显示
                        Toast toast = Toast.makeText(RentActivity.this, "最高可租2辆车!", Toast.LENGTH_LONG);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                    } else if (integer < 1) {
                        count.setText(1 + "");
                        Toast toast = Toast.makeText(RentActivity.this, "最低可租1辆车!", Toast.LENGTH_LONG);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                    }
                }
            }

            @Override
            public void afterTextChanged(Editable pEditable) {
                
            }
        });

第二种:

public class RegionNumberEditText extends androidx.appcompat.widget.AppCompatEditText {
    private Context context;
    private int max;
    private int min;

    public RegionNumberEditText(Context context) {
        super(context);
        this.context = context;
    }

    public RegionNumberEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    public RegionNumberEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.context = context;
    }

    /**
     * 设置输入数字的范围
     * @param maxNum 最大数
     * @param minNum 最小数
     */
    public void setRegion(int maxNum, int minNum) {
        setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL);
        this.max = maxNum;
        this.min = minNum;
    }

    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) {//从一输入就开始判断,
                    if (min != -1 && max != -1) {
                        try {
                            int num = Integer.parseInt(s.toString());
                            //判断当前edittext中的数字(可能一开始Edittext中有数字)是否大于max
                            if (num > max) {
                                s = String.valueOf(max);//如果大于max,则内容为max
                                setText(s);
                             //   Prompt.showTips(context, "金额不能超过" + max + "元");

                            } else if (num < min) {
                                s = String.valueOf(min);//如果小于min,则内容为min
                                setText(s);
                            }
                        } catch (NumberFormatException e) {
                        //    LFLog.e("ontextchanged", "==" + e.toString());
                        }
                        //edittext中的数字在max和min之间,则不做处理,正常显示即可。
                        return;
                    }
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }
}

引用:布局

<com.lmc.chatroom.RegionNumberEditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

代码:

name.setRegion(3,2);
name.setTextWatcher();

以上就是关于当时问题的解决办法啦!如有大佬有更好的办法,可以互相分享一下!