- 浏览: 375590 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1177自定义的dialog没有全屏的解决办法: AlertD ... -
Android中计算textView长度问题
2012-10-18 17:54 5721http://zilla.blog.51cto.com/309 ... -
控件宽高
2012-10-18 11:38 870imageView = (ImageView)findVie ... -
多级树形菜单的实现_expandlist
2012-10-17 17:17 804多级树形菜单的实现_expandlist http: ... -
适应多行长文本的Android TextView
2012-09-18 21:14 1033适应多行长文本的Android TextView ht ... -
ListView的右边滚动滑块
2012-09-03 18:09 3241ListView的右边滚动滑块: XML布局只需要在L ... -
设置Scrollview滚动位置
2012-09-03 09:51 1307appViewContent.post(new Runnabl ... -
ScrollView中的组件设置android:layout_height=fill_parent不起作用的解决办法
2012-08-31 11:01 1618ScrollView中的组件设置android:layout_ ... -
ScrollView反弹效果的实现
2012-08-22 11:39 1820转载:http://www.eoeandroid.com/th ... -
viewpager
2012-07-23 14:28 1945Android ViewPager多页面滑动切换以及动画效果 ... -
search搜索框
2012-07-05 12:50 748转载: 动态修改android内置搜索对话框(浮动搜索 ... -
仿iphone滑动开关按钮实现
2012-06-25 15:24 2555转载: http://www.apkbus.com/foru ... -
android仿iphone滚轮效果实现
2012-06-25 15:19 1673转载:android仿iphone滚轮效果实现 htt ... -
能够兼容ViewPager的ScrollView
2012-06-25 13:03 13434转载:http://www.strongcms.net/mob ... -
viewpager Android实现导航菜单左右滑动效果
2012-06-19 16:02 7036http://blog.csdn.net/xiedantibu ... -
纵向GALERY
2012-06-07 16:11 765纵向GALERY收藏: -
listview的item点击无反应
2012-06-04 13:56 1072用于处理在listview中加入某些控件后,控件和Listvi ... -
edittext
2012-05-21 11:40 796EditText继承关系:View-->TextView ... -
relativelayout
2012-05-21 11:38 874// 相对于给定ID控件 android:layout_ ... -
Android 对话框中的进度条 ProgressDialog
2012-04-22 22:35 1002package com.yarin.android.Tes ...
相关推荐
监听edittext输入的字符长度,可自行添加需要的操作
android EditText 限制最大输入字符,是字符不是长度哦
EditText监听输入完成,监听edittext,精确判断什么时候输入完成
android 中如何限制 EditText 最大输入字符数,此文档有较好的例子讲解
在afterTextChanged函数中,更新还能输入的字数,达到限制字数后,删除输入字符。以达到,视觉上,无法输入的效果。
edittext输入超过长度自动缩小文字大小并动态记录可输入文字
Android EditText限制输入字符的方法总结 最近项目要求限制密码输入的字符类型, 例如不能输入中文。 现在总结一下EditText的各种实现方式, 以比较各种方法的优劣。 第一种方式: 设置EditText的inputType属性...
Android EditText限制输入字符类型的方法总结 前言: 最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1、第一种方式是通过EditText的inputType来实现,可以通过xml或者Java...
一个简单的小Demo,能够限制EditText的输入字符数并对用户进行提示。博客文章地址:http://blog.csdn.net/Lindroid20/article/details/56845775
EditText输入限制,比如只能输入6个汉字或12个英文字母、数字
自己写的一个deom,实现自己设定edittext的长度,自己设定只输入数字,字母。
Android开发之EditText字符串过滤器InputFilter
Android EditText 正则表达式 限制数字、字母、字符 输入 密码框
android 输入框EditText禁止输入Emoji表情符,博客地址:http://blog.csdn.net/elsdnwn/article/details/45390771
Edittext限制字符数和限制表情符
EditText中输入表情和文字,仿照扣扣表情
多个EditText 实现的连续输入的密码框。可以实现焦点的自动前移后移
自定义EditText。限制输入文字为两行,添加两行行线。可以根据实际需求修改
Android限制只能输入中文的EditText,对输入的内容进行监听拦截。