本文主要是介绍Android中EditText超出字数限制添加用户提示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当我们在Editext输入内容的时候,检测如果超过限制的长度无法输入内容,并且给用户提示。
首先我想到了下面的方法:
editText.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {if (s.length() > 6){ //判断EditText中输入的字符数是不是已经大于6editText.setText(s.toString().substring(0,6)); //设置EditText只显示前面6位字符editText.setSelection(6);//让光标移至末端Toast.makeText(MainActivity.this, "输入字数已达上限", Toast.LENGTH_SHORT).show();return;}}@Overridepublic void afterTextChanged(Editable s) {}});
未经测试,个人觉得这种体验或许不是很好,或许会出现EdiText闪动。
其实我们可以用下面这种方法:
源码给Editext设置了过滤器,专门用来判断是否超出最大的字符长度,把这段过滤器取出来,在里面加上Toast提示,设置给Editext就可以了。
class MyLengthFilter implements InputFilter {private final int mMax;private Context context;public MyLengthFilter(int max, Context context) {mMax = max;this.context = context;}public CharSequence filter(CharSequence source, int start, int end, Spanned dest,int dstart, int dend) {int keep = mMax - (dest.length() - (dend - dstart));if (keep <= 0) {//这里,用来给用户提示Toast.makeText(context, "字数不能超过" + mMax, Toast.LENGTH_SHORT).show();return "";} else if (keep >= end - start) {return null; // keep original} else {keep += start;if (Character.isHighSurrogate(source.charAt(keep - 1))) {--keep;if (keep == start) {return "";}}return source.subSequence(start, keep);}}/*** @return the maximum length enforced by this input filter*/public int getMax() {return mMax;}}
调用:
mEditext.setFilters(new InputFilter[]{new MyLengthFilter(100,context)});
源码中该方法是这样的:
public void setFilters(InputFilter[] filters) {if (filters == null) {throw new IllegalArgumentException();}mFilters = filters;if (mText instanceof Editable) {setFilters((Editable) mText, filters);}}
由此可见我们可以给Editext设置多个过滤器,例如过滤掉一些特殊字符,表情等等。
设置Editext的光标宽高与颜色
在Editext的布局属性上加上
android:textCursorDrawable="@drawable/cursor_shape"
cursor_shape如下:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><sizeandroid:width="1dp" /><solid android:color="@color/comics_theme_color" /><paddingandroid:top="-2dp"android:bottom="-2dp"/> </shape>
事实证明:设置android:height无效,应该用padding的方法。
top设置为-2dp :让光标顶部下移2dp
bottom设置为-2dp:让光标底部上移2dp
这样子光标的高度就变小了4dp
从下面的源码可以大概看出原因:
private void updateCursorPosition(int cursorIndex, int top, int bottom, float horizontal) {...mCursorDrawable[cursorIndex].getPadding(mTempRect);...mCursorDrawable[cursorIndex].setBounds(left, top - mTempRect.top, left + width,bottom + mTempRect.bottom); }
这篇关于Android中EditText超出字数限制添加用户提示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!