- 浏览: 384239 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
longxishui12:
这个一定要顶得高高的。
[Android UI界面] android中仿iphone实现listview的反弹效果 -
klower.jiang:
Good job, Thank you so much!
能够兼容ViewPager的ScrollView -
ZSRTFAT:
...
file size 的大小计算
转载:
http://blog.csdn.net/liujianminghero/article/details/7092236
Android 中的EditText最大可输入字符数可以通过xml文件中为EditText设置maxLength属性或者在代码中为EditText设置LengthFilter来设置。
例如要设置EditText只能输入10个字符
xml中:
- <EditText android:layout_width = "fill_parent"
- android:layout_height = "wrap_content"
- android:id = "@+id/mEdit"
- android:maxLength = "10"/>
- <EditText android:layout_width = "fill_parent"
- android:layout_height = "wrap_content"
- android:id = "@+id/mEdit"
- android:maxLength = "10"/>
代码中:
- EditText mEdit = (EditText)findViewById(R.id.mEdit);
- InputFilter[] filters = {new LengthFilter(10)};
- mEdit.setFilters(filters);
- EditText mEdit = (EditText)findViewById(R.id.mEdit);
- InputFilter[] filters = {new LengthFilter(10)};
- mEdit.setFilters(filters);
以上任意一种方法都可以满足需求,但这种方法只能为EditText设置统一的最大可输入字符,如果碰到根据实际情况限制不同的可输入字符数时,这种方法就不能用了。
比如SIM卡上的电话本姓名字段长度,纯英文下允许输入17个字符,而中文则只可以输入6个字符。此时可以重写InputFilter类来实现。
即:
- EditText mEdit = (EditText)findViewById(R.id.mEdit);
- InputFilter[] filters = {new AdnNameLengthFilter()};
- mEdit.setFilters(filters);
- public static class AdnNameLengthFilter implements InputFilter
- {
- private int nMax;
- public CharSequence filter (CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
- {
- Log.w("Android_12", "source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest);
- if(isChinese(dest.toString())|| isChinese(source.toString()))
- {
- nMax = LENGTH_ZNAME;
- }else
- {
- nMax =LENGTH_ENAME;
- }
- int keep = nMax - (dest.length() - (dend - dstart));
- if (keep <= 0) {
- return "";
- } else if (keep >= end - start) {
- return null; // keep original
- } else {
- return source.subSequence(start, start + keep);
- }
- }
- }
- EditText mEdit = (EditText)findViewById(R.id.mEdit);
- InputFilter[] filters = {new AdnNameLengthFilter()};
- mEdit.setFilters(filters);
- public static class AdnNameLengthFilter implements InputFilter
- {
- private int nMax;
- public CharSequence filter (CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
- {
- Log.w("Android_12", "source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest);
- if(isChinese(dest.toString())|| isChinese(source.toString()))
- {
- nMax = LENGTH_ZNAME;
- }else
- {
- nMax =LENGTH_ENAME;
- }
- int keep = nMax - (dest.length() - (dend - dstart));
- if (keep <= 0) {
- return "";
- } else if (keep >= end - start) {
- return null; // keep original
- } else {
- return source.subSequence(start, start + keep);
- }
- }
- }
其中的isChinese函数是判断是否字符串中是否包含中文字符,具体实现方法就不再赘述了。
LENGTH_ZNAME : 是中文模式下允许输入的最大字符数。
LENGTH_ENAME:是纯英文模式下允许输入的最大字符数。
判断汉字的方法private boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
数字就根据unicode的范围判断吧!
方法一:利用TextWatcher
editText.addTextChangedListener(new TextWatcher() {
private CharSequence temp;
private boolean isEdit = true;
private int selectionStart ;
private int selectionEnd ;
@Override
public void beforeTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
temp = s;
}
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable s) {
selectionStart = editText.getSelectionStart();
selectionEnd = editText.getSelectionEnd();
Log.i("gongbiao1",""+selectionStart);
if (temp.length() > Constant.TEXT_MAX) {
Toast.makeText(KaguHomeActivity.this,
R.string.edit_content_limit, Toast.LENGTH_SHORT)
.show();
s.delete(selectionStart-1, selectionEnd);
int tempSelection = selectionStart;
editText.setText(s);
editText.setSelection(tempSelection);
}
}
});
private TextWatcher mTextWatcher = new TextWatcher(){
Toast mToast = null;
public void beforeTextChanged(CharSequence s, int start,
int count,int after) {
}
public void onTextChanged(CharSequence s, int start,
int before,int count) {
}
public void afterTextChanged(Editable s) {
int nSelStart = 0;
int nSelEnd = 0;
boolean nOverMaxLength = false;
nSelStart = mEditText.getSelectionStart();
nSelEnd = mEditText.getSelectionEnd();
nOverMaxLength = (s.length() > Constants.MAX_TEXT_INPUT_LENGTH) ? true : false;
if(nOverMaxLength){
if(null == mToast){
mToast = Toast.makeText(mContext,
R.string.IDS_MSG_TEXT_OVER_MAXLENGTH,
Toast.LENGTH_SHORT);
}
mToast.show();
s.delete(nSelStart - 1, nSelEnd);
mEditText.setTextKeepState(s);//请读者注意这一行,保持光标原先的位置,而 mEditText.setText(s)会让光标跑到最前面,
//就算是再加mEditText.setSelection(nSelStart) 也不起作用
}
}
};
方法二:利用InputFilter
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(100)}); //其中100最大输入字数
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(100)}); //其中100最大输入字数
方法三:在XML中设定
Xml代码
<EditText
.
.
.
Android:maxLength="100"
/>
=========================================================
方法二:
利用EditText可以设置filter的特性,自定义一个LengthFilter,当输入字数超过限制时 ,做出自定义的提示
// 输入框限制输入字数
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter.LengthFilter(Constant.TEXT_MAX) {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if (source.length() > 0 && dest.length() == Constant.TEXT_MAX) {
if ((System.currentTimeMillis() - toastTime) > interval) {
toastTime = System.currentTimeMillis();
Toast
.makeText(KaguHomeActivity.this,
R.string.edit_content_limit,
Toast.LENGTH_SHORT).show();
}
}
if (dest.toString().equals(
getResources().getString(R.string.input_default_txt))) {
Bundle data = new Bundle();
data.putCharSequence("source", source);
Message message = textHandler.obtainMessage();
message.setData(data);
message.sendToTarget();
}
return super.filter(source, start, end, dest, dstart, dend);
}
};
editText.setFilters(filters);
private Handler textHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bundle data = msg.getData();
CharSequence source = data.getCharSequence("source");
editText.setTextColor(Color.BLACK);
editText.setText(source);
editText.setSelection(source.length());
}
};
=============================================================
发表评论
-
dialog全屏的问题
2012-11-02 15:43 1215自定义的dialog没有全屏的解决办法: AlertD ... -
Android中计算textView长度问题
2012-10-18 17:54 5756http://zilla.blog.51cto.com/309 ... -
控件宽高
2012-10-18 11:38 896imageView = (ImageView)findVie ... -
多级树形菜单的实现_expandlist
2012-10-17 17:17 833多级树形菜单的实现_expandlist http: ... -
适应多行长文本的Android TextView
2012-09-18 21:14 1069适应多行长文本的Android TextView ht ... -
ListView的右边滚动滑块
2012-09-03 18:09 3269ListView的右边滚动滑块: XML布局只需要在L ... -
设置Scrollview滚动位置
2012-09-03 09:51 1336appViewContent.post(new Runnabl ... -
ScrollView中的组件设置android:layout_height=fill_parent不起作用的解决办法
2012-08-31 11:01 1645ScrollView中的组件设置android:layout_ ... -
ScrollView反弹效果的实现
2012-08-22 11:39 1850转载:http://www.eoeandroid.com/th ... -
viewpager
2012-07-23 14:28 1976Android ViewPager多页面滑动切换以及动画效果 ... -
search搜索框
2012-07-05 12:50 789转载: 动态修改android内置搜索对话框(浮动搜索 ... -
仿iphone滑动开关按钮实现
2012-06-25 15:24 2585转载: http://www.apkbus.com/foru ... -
android仿iphone滚轮效果实现
2012-06-25 15:19 1703转载:android仿iphone滚轮效果实现 htt ... -
能够兼容ViewPager的ScrollView
2012-06-25 13:03 13477转载:http://www.strongcms.net/mob ... -
viewpager Android实现导航菜单左右滑动效果
2012-06-19 16:02 7070http://blog.csdn.net/xiedantibu ... -
纵向GALERY
2012-06-07 16:11 819纵向GALERY收藏: -
listview的item点击无反应
2012-06-04 13:56 1102用于处理在listview中加入某些控件后,控件和Listvi ... -
edittext
2012-05-21 11:40 833EditText继承关系:View-->TextView ... -
relativelayout
2012-05-21 11:38 905// 相对于给定ID控件 android:layout_ ... -
Android 对话框中的进度条 ProgressDialog
2012-04-22 22:35 1052package com.yarin.android.Tes ...
相关推荐
以上就是关于监听`EditText`输入字符长度并进行相应处理的知识点。通过结合`TextWatcher`和`afterTextChanged()`方法,你可以轻松实现对用户输入的控制,满足各种业务场景的需求。在实际开发中,可以根据项目的具体...
有时候,我们可能需要对用户输入的字符数量进行限制,比如信用卡号、密码输入等场景,这时就需要设置`EditText`的最大输入字符数。不同于字节长度或字节数,这里的“字符”通常指的是用户肉眼可见的字符,包括英文、...
如果需要过滤特殊字符,可以创建一个包含合法字符的集合,然后检查输入字符是否在集合内。 4. **组合多个InputFilter**:有时我们需要同时应用多种过滤规则,例如限制长度和过滤特殊字符。在这种情况下,可以创建一...
在某些特定场景下,我们可能需要对`EditText`的行为进行限制,比如限制输入的字符长度、只允许输入特定类型的字符(如数字或字母)。本文将详细讲解如何通过自定义`EditText`实现这些功能。 首先,我们需要创建一个...
如果输入的不是中文字符,我们可以在`onTextChanged()`方法中清空EditText的内容,或者显示一个提示信息告知用户只能输入中文。这样,当用户尝试输入非中文字符时,系统会自动将其过滤掉。 6. **代码示例**: 在...
下面是一个简单的示例代码,展示如何限制`EditText`的输入字符数: ```java EditText editText = findViewById(R.id.edit_text_signature); editText.addTextChangedListener(new TextWatcher() { @Override ...
有时,我们可能需要对EditText的输入进行限制,比如限制输入的字符长度、类型、格式等,以满足特定的应用场景需求。在"android EditText 限制输入的4种方法【修正版】"中,我们将探讨四种有效的方法来实现这些限制。...
当用户输入字符达到特定长度时,插入一个空格。这里的关键在于如何判断何时添加空格以及如何插入。 在`XEditText`类中,我们可以定义一个计数器,每当用户输入一个字符,计数器加一。当计数器达到预设的分隔长度...
10. **输入限制**:还可以使用`InputFilter`来限制EditText的输入,例如限制字符长度、只允许数字输入等。 通过这个压缩包中的源码示例,开发者可以学习到如何在实际项目中应用上述技巧,为用户提供更加智能和友好...
在这个例子中,`afterTextChanged()` 方法首先移除已有的空格,然后根据输入长度判断是否需要插入空格。如果长度大于3且长度能被4整除,说明可以插入空格,于是从倒数第一个字符开始,每隔4个字符插入一个空格。如果...
这段代码首先检查输入的字符序列是否为空,然后判断EditText当前的值是否已经包含小数点。如果包含小数点,就计算小数点后的位数与我们设定的位数(这里为1)之间的差值。如果差值大于0,表示用户输入的小数点后位数...
6. **样式的优化**:如果需要,还可以通过自定义`InputFilter`来控制输入的字符长度,或者使用`SpannableStringBuilder`和`CharacterStyle`来改变星号的颜色或样式,提升UI效果。 综上所述,通过结合`EditText`的...
这个开源项目提供了一种自定义的EditText组件,能够实时检查并验证用户输入的密码是否满足预设的条件,如长度、复杂性等,从而提高应用的安全标准。 在`PasswordEditText`中,开发者可以设置多种验证规则,例如: ...
在这个布局中,我们设置了EditText为密码类型(`inputType="textPassword"`),限制最大字符长度为6,以及添加一个提示文本。自定义图标可以通过修改`ImageView`的`src`属性来更改。 最后,为了让Dialog在应用中...
例如,可以创建一个自定义的`InputFilter`,检查输入的字符是否为小数点,并限制小数点后的长度。但这种方法的不足在于,它可能无法覆盖所有可能的异常情况,可能导致用户体验不佳。 另一种更灵活且推荐的方法是...
此外,我们还限制了输入的长度为16位,以符合常见的信用卡号格式。 在处理用户删除操作时,需要记录删除的位置,确保在重新拼接字符串后,光标能回到正确的位置。这里可以通过设置`setSelection()`方法来控制光标...
在给定的代码中,`isDelete`变量用于判断当前操作是输入还是删除,`lastContentLength`记录上一次文本的长度,以便比较。 以下是完整的`PhoneTextWatcher`类的代码示例: ```java public class PhoneTextWatcher ...
最近在做的项目中用户编辑资料的时候不希望用户输入表情,如果用户输入表情的话上传给后台要报错,所以需要我们前端做一个判断。下面就来说一下怎么在EditText中屏蔽表情吧。 网上有很多这样的列子但是一不小心就会...
这个类可能用于限制EditText的输入长度,通过重写`Filter.filter()`方法,可以实现对用户输入的字符数量进行控制,同时也可以在此基础上扩展,加入过滤特殊字符或表情符号的功能。 6. **实践应用**: - **网页...
除了基本的文本验证,还可以结合`android:maxLength`属性限制输入长度,或者使用`android:digits`指定只允许输入特定字符集。同时,`android:imeOptions`和`android:imeActionLabel`可以设置软键盘的完成行为,如"Go...