如果用户尝试在Android edittext中达到限制后尝试键入,请设置错误

问题描述 投票:3回答:4

我试过通过TextWatcherafterTextChanged。如果用户在达到限制后尝试插入字符,我想要的只是在EditText上显示toast消息或设置错误。我认为这是可能的。但不知道如何实现这一目标。

更新

我的EditText编码是

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:maxLength="10"
        android:layout_marginTop="150dp"
        android:inputType="numberDecimal" >

在这里,如果用户试图输入超过10位数,我想显示一个吐司或想要设置错误。

更新

 editText1.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (editText1.getText().length() >= 10)
                Toast.makeText(getApplicationContext(), "hi",
                        Toast.LENGTH_SHORT).show();
            return false;
        }
    });
android android-edittext
4个回答
0
投票

你可以用editText得到你的this的maxLength。然后实现一个keyListener。

 int maxLength = //getMaxLenght here;
    editText.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(editText.getText().toString().length()>= maxLength) {
                //Show toast here
            }
            return false;
        }
    });

1
投票

关键监听器无法在软输入键盘上工作..来自Android参考:

http://developer.android.com/reference/android/view/View.OnKeyListener.html

View.OnKeyListener

类概述将硬件键事件调度到此视图时要调用的回调的接口定义。在将键事件提供给视图之前将调用回调。这仅适用于硬件键盘;软件输入方法没有义务触发此监听器。

这意味着TextWatcher只是你的朋友,有编辑框和键盘输入..


0
投票

假设您知道EditText的最大长度,您可以像这样使用EditText.setError(String errorMsg)

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        if (charSequence.toString().length() >= maxLength) {
            // show toast / error here
            String limitReached = "Maximum limit of characters reached!";
            editText.setError(limitReached);
        } else {
            // clear error
            editText.setError(null);
        }
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});

它看起来像这样。当EditText未处于焦点时,不显示错误消息,但错误图标保持可见。您可以使用EditText.getError()检查EditText上当前是否存在错误。

example of EditText.setError() appearance

这可能比你要求的要多,但如果你有一个带有动态字符限制的EditText,我建议在maxLength变量的某个地方挂一个值。 (例如,支付卡的安全代码因卡类型而异)

但是,您可以执行以下操作以编程方式检查android:maxLength当前设置的XML值:

    private int getEditTextCharacterLimit(EditText editText) {
        int defaultMaxLength = 5; // default value

        InputFilter[] filters = editText.getFilters();
        if (filters != null && filters[0] != null && filters[0] instanceof InputFilter.LengthFilter) {
            return ((InputFilter.LengthFilter) filters[0]).getMax();
        } else {
            return defaultMaxLength;
        }
    }

Here's how you would dynamically change the EditText's character limit programmatically.


0
投票

这可能比您要求的要多,但是如果您有一个具有动态字符限制的EditText,我建议在maxLength变量的某处挂起该值。 (例如,支付卡的安全代码因卡类型而异)

© www.soinside.com 2019 - 2024. All rights reserved.