EditText输入框字数限制

在这里插入图片描述
1:

 <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:focusable="true"
        android:focusableInTouchMode="true">
   <EditText
            android:id="@+id/community_publish_content"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:padding="12dp"
            android:minLines="5"
            android:maxLength="300"
            android:gravity="top"
            android:background="@drawable/community_edt_note_bg"
            android:textColor="#181818"
            android:textSize="14sp"/>

        <TextView
            android:id="@+id/community_publish_num"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/community_publish_content"
            android:layout_alignParentEnd="true"
            android:text="0/300" />
    </RelativeLayout>

2代码块

 private int max= 300;//限制的最大字数
 EditText communityPublishContent;
 TextView communityPublishNum;
  //输入框字数限制
        InputFilter[] filters={chineseFilter()};
        communityPublishContent.addTextChangedListener(passwordListener());
        communityPublishContent.setFilters(new InputFilter[]{new InputFilter.LengthFilter(max)});//超过300字就不能再输入了
         /**
     * 输入框
     * @return
     */
    private InputFilter chineseFilter() {
        return new InputFilter() {
            String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend) {
                float destCount = dest.toString().length()
                        + getChineseCount(dest.toString());
                float sourceCount = source.toString().length()
                        + getChineseCount(source.toString());
                if (destCount + sourceCount > 10) {
                    Log.e("log", "已经达到字数限制范围");
                    return "";

                } else {
                    return source;
                }
            }

            private float getChineseCount(String str) {
                float count = 0;
                Pattern p = Pattern.compile(regEx);
                Matcher m = p.matcher(str);
                while (m.find()) {
                    for (int i = 0; i <= m.groupCount(); i++) {
                        count =count + 1;//
                    }
                }
                return count;
            }
        };
    }
    private TextWatcher passwordListener() {
        return new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                int length = s.length();
                communityPublishNum.setText(length + "/" + max);
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
            }

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

    }

猜你喜欢

转载自blog.csdn.net/weixin_43117800/article/details/88050952