在60个字符之后使edittext无法编辑

时间:2015-04-13 06:19:51

标签: android android-edittext

我试图禁用60个字符后输入edittext的文本。这是我试图实现的代码,

edittext.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 (s.toString().replaceAll("\\s", "").length() <= 40) {
                    edittext.setKeyListener(variable);
                } else {
                    //edittext.setCursorVisible(false);
                    edittext.setKeyListener(null);

                    Toast.makeText(PersonalChatActivity.this, "60 characs allowed", Toast.LENGTH_SHORT).show();
                }

            }

            @Override
            public void afterTextChanged(Editable s) {
                    edittext.setKeyListener((KeyListener)edittext.getTag());
            }
        }); 

还尝试设置cetCoursorVisiblefalse(false),setEnabled(false),setFocusable(false),setFocusableinTouchMode(false)。所有这些工作正常。但是当我尝试通过按键盘上的后退按钮清除文本时,文本ain关于如何实现这一点的任何建议。谢谢。

4 个答案:

答案 0 :(得分:3)

    edittext.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 (!(s.toString().length() <= 60)) {
                edittext.setText(s.subSequence(0, 60));
                edittext.setSelection(edittext.getText().length());
            }

        }

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

答案 1 :(得分:1)

尝试:

int maxLength = 60;
InputFilter[] fArray = new InputFilter[1];
fArray[0] = new InputFilter.LengthFilter(maxLength);
myEditText.setFilters(fArray);

答案 2 :(得分:0)

在布局xml内部,对于edittext小部件,您可以设置edittext的android:maxLength属性。

示例:

<Edittext 
  android:id="@+id/et_entry"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:maxLength="60"
/>

因此,在60个字符后,它将不接受来自用户的更多输入。但是如果用户删除了一些字符,那么edittext将接受输入并接受直到字符长度为60。

答案 3 :(得分:0)

我不确定这是否是确切的解决方案但请试试这个:

   in xml.
 <EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="40dp"
    android:maxLength="60"
    android:layout_marginTop="72dp"
    >
   <requestFocus />
   </EditText>

  In activity:

   editText = (EditText) findViewById(R.id.editText1);
   editText.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(editText.getText().length() >= 60){
                Toast.makeText(MainActivity.this, "60 characs allowed", Toast.LENGTH_SHORT).show();
            }
             }

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