输入框字数限制+动态提示:10个汉字或20个字符的问题
2015-01-20 09:59
381 查看
需求:
EditText输入框,要求输入10个汉字,或者20个字符,支持中英文混输。当输入框内数据满足条件时,弹出Toast进行提示。
实现:
我是通过TextWatcher的方式,来进行实现的。即使一次粘贴很多文字也不会报错。
废话不多言,直接上代码:
EditTextLimitTextWatcher:
使用:MainActivity
XML布局文件:
效果,上图:
当超出10个汉字,或者20个字符时:
参考文章:
http://blog.csdn.net/scyatcs/article/details/8798810 http://blog.csdn.net/liujianminghero/article/details/7092236
PS:
已知的小Bug:当输入一段文字后,把光标移至文字中间,输入文字后,光标都会移至最末。有哪位童鞋可以解决的话,恳请指出,拜谢。
EditText输入框,要求输入10个汉字,或者20个字符,支持中英文混输。当输入框内数据满足条件时,弹出Toast进行提示。
实现:
我是通过TextWatcher的方式,来进行实现的。即使一次粘贴很多文字也不会报错。
废话不多言,直接上代码:
EditTextLimitTextWatcher:
/** * 对输入框进行字数限制的textWatcher,支持中英文混输,超出字符数会弹出Toast * * @author Lento */ public class EditTextLimitTextWatcher implements TextWatcher { private final int mMaxLenth; private String mToastText; private Context mContext; private Toast mToast; private EditText mEditText; private int mCharCount; /** * @param mContext * @param mEditText: 需要监视的输入框 * @param mMaxLenth :支持输入的最大字符数(1个汉字为2个字符,1个英文字母为1个字符) * @param mToastText: 输入字符数超出最大值时的toast文字提示,为null时,不提示 */ public EditTextLimitTextWatcher(Context mContext, EditText mEditText, int mMaxLenth, String mToastText) { this.mContext = mContext; this.mMaxLenth = mMaxLenth; this.mToastText = mToastText; this.mEditText = mEditText; } /** * 避免多次重复弹出toast * * @param text */ private void showToast(String text) { if (mToast == null) { mToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT); } else { mToast.setText(text); mToast.setDuration(Toast.LENGTH_SHORT); } mToast.show(); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { mCharCount = before + count; if (mCharCount > mMaxLenth) { mEditText.setSelection(mEditText.length()); } try { mCharCount = mEditText.getText().toString().getBytes("GBK").length; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { if (mCharCount > mMaxLenth) { CharSequence subSequence = null; for (int i = 0; i < s.length(); i++) { subSequence = s.subSequence(0, i); try { if (subSequence.toString().getBytes("GBK").length == mCharCount) { mEditText.setText(subSequence.toString()); break; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } if (!TextUtils.isEmpty(mToastText)) { showToast(mToastText); } String androidVersion = android.os.Build.VERSION.RELEASE; if (androidVersion.charAt(0) >= '4') { mEditText.setText(subSequence.toString()); } } } }
使用:MainActivity
public class MainActivity extends Activity { private EditText mEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText)findViewById(R.id.et); EditTextLimitTextWatcher mTextWatcher = new EditTextLimitTextWatcher(this, 20, "字数超出限制了!"); mEditText.addTextChangedListener(mTextWatcher); }
XML布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/et" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
效果,上图:
当超出10个汉字,或者20个字符时:
参考文章:
http://blog.csdn.net/scyatcs/article/details/8798810 http://blog.csdn.net/liujianminghero/article/details/7092236
PS:
已知的小Bug:当输入一段文字后,把光标移至文字中间,输入文字后,光标都会移至最末。有哪位童鞋可以解决的话,恳请指出,拜谢。
相关文章推荐
- Android限制输入框10个汉字或20个字母完美实现
- 对字符串中是否包含特殊字符,是否是空格或换行, 以及字数的限制(汉字和字母)
- 数据库字符编码和界面文本输入框字数限制问题
- EditText限制输入的字符数并弹出Toast提示字数已达上限
- ueditor字数限制如何计算汉字字符数
- 实现textarea限制输入字数(包含中文只能输入10个,全ASCII码能够输入20个)
- 控制文本输入框最多输入10个字符长度(即五个汉字)
- 实现textarea限制输入字数(包含中文只能输入10个,全ASCII码能够输入20个)
- 需求:EditText限制 输入20个字母。10个汉字
- UITextField限制输入字数高亮状态下输入框内真实类容与textFiled(解决中文输入问题)
- 实现textarea限制输入字数(包含中文只能输入10个,全ASCII码能够输入20个)
- JavaScript动态提示输入框输入字数的方法
- 实现textarea限制输入字数(包含中文只能输入10个,全ASCII码能够输入20个)
- 常用正则表达式和JS控制输入框输入限制(数字、汉字、字符)
- 带字数限制提示的输入框效果
- iOS 解决汉字联想输入,导致字数限制失效的问题
- JavaScript动态提示输入框输入字数的方法
- 验证textarea输入框字数限制,只作提示不作提交限制
- (转载)ListView背景问题以及EidtText字数限制和提示
- 常用正则表达式和JS控制输入框输入限制(数字、汉字、字符)