Android EditText之输入限制设置
转载:https://blog.csdn.net/shenggaofei/article/details/106314909
Android EditText之输入限制设置,适用于常用的产品需求
inputType属性:
android:inputType=none:普通字符。
android:inputType=text:普通字符。
android:inputType=textCapCharacters:字母大写。
android:inputType=textCapWords:首字母大写。
android:inputType=textCapSentences:仅第一个字母大写。
android:inputType=textAutoCorrect:自动完成。
android:inputType=textAutoComplete:自动完成。
android:inputType=textMultiLine:多行输入。
android:inputType=textImeMultiLine:输入法多行(如果支持)。
android:inputType=textNoSuggestions:不提示。
android:inputType=textUri:网址。
android:inputType=textEmailAddress:电子邮件地址。
android:inputType=textEmailSubject:邮件主题。
android:inputType=textShortMessage:短讯。
android:inputType=textLongMessage:长信息。
android:inputType=textPersonName:人名。
android:inputType=textPostalAddress:地址。
android:inputType=textPassword:密码。
android:inputType=textVisiblePassword:可见密码。
android:inputType=textWebEditText:作为网页表单的文本。
android:inputType=textFilter:文本筛选过滤。
android:inputType=textPhonetic:拼音输入。
android:inputType=number:数字。
android:inputType=numberSigned:带符号数字格式。
android:inputType=numberDecimal:带小数点的浮点格式。
android:inputType=phone:拨号键盘。
android:inputType=datetime:时间日期。
android:inputType=date:日期键盘。
android:inputType=time:时间键盘。
1.EditText限制不可以以0或小数点(.)开头
2.EditText限制输入价格控制位数(小数点前几位,小数点后几位)
上面两个需求实现如下:
a.自定义一个TextWatcher:
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
/**
* EditText内容输入限制最大:小数点前五位,小数点后2位
*/
public class EditTextJudgeNumberWatcher implements TextWatcher {
private EditText editText;
public EditTextJudgeNumberWatcher(EditText editText) {
this.editText = editText;
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
judgeNumber(editable,editText);
}
/**
* 金额输入框中的内容限制(最大:小数点前五位,小数点后2位)
*
* @param edt
*/
public static void judgeNumber(Editable edt,EditText editText) {
String temp = edt.toString();
int posDot = temp.indexOf(".");//返回指定字符在此字符串中第一次出现处的索引
int index = editText.getSelectionStart();//获取光标位置
// if (posDot == 0) {//必须先输入数字后才能输入小数点
// edt.delete(0, temp.length());//删除所有字符
// return;
// }
//--
int len = temp.toString().length();
//若0或.开头就设置不显示,必须是大于0的正整数开头
if (len >= 1 && temp.startsWith("0")||temp.startsWith(".")) {
edt.replace(0,1,"");
// editable.clear();
}
if (posDot < 0) {//不包含小数点
if (temp.length() <= 5) {
return;//小于五位数直接返回
} else {
edt.delete(index-1, index);//删除光标前的字符
return;
}
}
if (posDot > 5) {//小数点前大于5位数就删除光标前一位
edt.delete(index-1, index);//删除光标前的字符
return;
}
if (temp.length() - posDot - 1 > 2)//如果包含小数点
{
edt.delete(index-1, index);//删除光标前的字符
return;
}
}
}
b.
etNumber = findViewById(R.id.et_number);
//设置使用
etNumber.addTextChangedListener(new EditTextJudgeNumberWatcher(etNumber));
c.布局:
<com.example.qd.douyinwu.utils.ExtendedEditText
android:id="@+id/et_number"
style="@android:style/Widget.Holo.EditText"
android:layout_width="match_parent"
android:layout_height="60dp"
android:padding="4dp"
android:gravity="center|left"
android:textSize="24dp"
android:hint="请输入数字"
android:inputType="numberDecimal"
app:buttonAlwaysCenter="true" />
自定义输入框ExtendedEditText:https://blog.csdn.net/shenggaofei/article/details/106313483
d.保存时设置;
DecimalFormat df = new DecimalFormat("0.00");
df.format(doubleData)
3.EditText限制可以输入0,但不能输入0开头的数字
etNumber.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String text = s.toString();
int len = s.toString().length();
if (len > 1 && text.startsWith("0")) {
s.replace(0,1,"");
}
}
});
/**
* 设置不能以0开头
* @param editText
*/
public static void setTaskSample(final EditText editText){
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String editTextString = editable.toString();
if(!TextUtils.isEmpty(editTextString)){
int len = editTextString.length();
//若0或.开头就设置不显示,必须是大于0的正整数开头
if (len >= 1 && editTextString.startsWith("0") || editTextString.startsWith(".")) {
editable.replace(0, 1, "");
}
}
}
});
}
4.EditText,只输入汉字和英文:
/**
* 自定义的只能输入汉字和英文的Edittext
*
*/
public class CustomEditText extends EditText {
public CustomEditText(Context context) {
super(context);
}
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new mInputConnection(super.onCreateInputConnection(outAttrs), false);
}
class mInputConnection extends InputConnectionWrapper implements InputConnection {
/**
* Initializes a wrapper.
* <p>
* <p><b>Caveat:</b> Although the system can accept {@code (InputConnection) null} in some
* places, you cannot emulate such a behavior by non-null {@link InputConnectionWrapper} that
* has {@code null} in {@code target}.</p>
*
* @param target the {@link InputConnection} to be proxied.
* @param mutable set {@code true} to protect this object from being reconfigured to target
* another {@link InputConnection}. Note that this is ignored while the target is {@code null}.
*/
public mInputConnection(InputConnection target, boolean mutable) {
super(target, mutable);
}
//拦截内容
@Override
public boolean commitText(CharSequence text, int newCursorPosition) {
// 只能输入汉字或者英文
if (!text.toString().matches("[\u4e00-\u9fa5]+") && !text.toString().matches("[a-zA-Z /]+")) {
return false;
}
return super.commitText(text, newCursorPosition);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
return super.sendKeyEvent(event);
}
@Override
public boolean setSelection(int start, int end) {
return super.setSelection(start, end);
}
}
}
判断输入的内容是否是纯英文或纯汉字:
//前提是传入的字符串只包含汉字和英文
// 判断一个字符串0格式不纯 2是纯英文 或者1纯汉语
public static int isChineseOrEngLish(String str) {
if (str == null)
return 0;
//判断是否含有汉字
Boolean isChinese = false;
for (char c : str.toCharArray()) {
if (isChinese(c)) {
isChinese = true;// 有一个中文字符就返回
}
}
//判断是否含有英文
Boolean isLetter = false;
for (char c : str.toCharArray()) {
if (isLetter("" + c))
isLetter = true;// 有一个中文字符就返回
}
if (isChinese && !isLetter) {//是纯汉字
return 1;
} else if (!isChinese && isLetter) {//是纯英文
return 2;
}
return 0;
}
// 判断一个字符是否是中文
public static boolean isChinese(char c) {
return c >= 0x4E00 && c <= 0x9FA5;// 根据字节码判断
}
//判断一个字符是否是英文字母
public static boolean isLetter(String c) {
return c.matches("[a-zA-Z /]+");
}
/**
* 只可以输入汉字和英文
* @param editText
*/
public static boolean setChineseAndEnglishJudgment(EditText editText){
Pattern p = Pattern.compile("[a-zA-Z|\u4e00-\u9fa5]+");
Matcher m = p.matcher(editText.getText().toString());
if (!m.matches()){
//说明输入不符合判断
return false;
}else {
return true;
}
}
5.判断输入的是否是数字:
/**
* 判断字符串中是否是数字
* @param str
* @return
*/
public static boolean isNumeric(String str){
if(!TextUtils.isEmpty(str)){
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() ){
return false;
}
}
return true;
}
6.禁止输入空格或特殊字符:
/**
* 禁止EditText输入空格和特殊字符
*
* @param editText
*/
public static void setEditTextInhibitInputSpaChat(EditText editText) {
InputFilter filter_space = new InputFilter() {//禁止空格处理
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (source.equals(" "))
return "";
else
return null;
}
};
InputFilter filter_speChat = new InputFilter() {//特殊字符处理
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
Pattern pattern = Pattern.compile(ConstUtils.PROHIBITED_SPECHAT);
Matcher matcher = pattern.matcher(charSequence.toString());
if (matcher.find()) return "";
else return null;
}
};
editText.setFilters(new InputFilter[]{filter_space, filter_speChat});
}
public static final String PROHIBITED_SPECHAT = "[`~!@#_$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()— +|{}【】‘;:”“’。,、?]";
EditTextUtils.setEditTextInhibitInputSpaChat(et_username);//设置启用限制方法
Android EditText之输入限制设置相关推荐
- android设置输入框输入字符限制,Android EditText限制输入字符的方法总结
Android EditText限制输入字符的方法总结 最近项目要求限制密码输入的字符类型, 例如不能输入中文. 现在总结一下EditText的各种实现方式, 以比较各种方法的优劣. 第一种方式 ...
- android edittext 输入长度,Android EditText限制输入字数的方法
本文实例讲述了Android EditText限制输入字数的方法.分享给大家供大家参考,具体如下: //新浪微博字数限制 private static final int WEIBO_CONTENT_ ...
- Android EditText组件drawableLeft属性设置的图片和hint设置的文字之间的距离
有的时候,我们需要在文本框里放置icon图片,并且设置默认提示文字的时候,需要设置两者之间的间距,如下图: 这里想设置的就是之前的手机icon和"请输入手机号"之间的距离,则可是使 ...
- android edittext最多输入,android 中如何限制 EditText 最大输入字符数
方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为10 方法二: 在代码中使用InputFilt ...
- Android EditText控制输入字符限制的方法
EditText控制输入字符限制的方法 1 EditText的inputType属性 inputType属性用于设置EditText的输入类型,如number,只能输入数字,软键盘为数字键盘 1.1 ...
- maxlength不起作用android,Android EditText禁止输入Emoji后设置android:maxLength失效的问题...
0X00 禁用emoji 有时候我们不想在EditText中输入Emoji表情,怎么处理呢? 我们可以通过设置InputFilter的方式来达到这个目的.怎么实现呢?直接上代码. public Inp ...
- Android 代码实现整数处理为小数,Android EditText限制输入整数和小数的位数的方法示例...
直接上代码 新建DecimalInputTextWatcher类继承TextWatcher (代码可直接复制使用) import android.text.Editable; import andro ...
- Android EditText 字数限制以及设置中文及中文符号算两个字符,英文及英文符号算一个字符的实现
/** * EditText字符数限制 * (中文及中文字符算两个字符,英文及英文字符算两个字符) */ public class EditTextLengthHelper { static Edit ...
- android限制输入字符的范围,Android EditText 对输入字数和内容范围进行限制
在做定制机时,对光敏值进行范围控制时,以及对区号输入时遇到对输入字数以及输入内容的显示.找了好多方法,终于找到了几种方法其中EditText的addTextChangedListener功不可没.例如 ...
最新文章
- window tool
- 《机器学习项目开发实战》送书活动结果公布
- iou画 yolov3_专栏 | 【从零开始学习YOLOv3】4. YOLOv3中的参数进化
- 线性表之简介及顺序表
- 阿里云mysql写入性能_如何评价阿里云新一代关系型数据库 PolarDB?
- 大型网站限流算法的实现和改造
- 谷歌浏览器如何正确离线网页
- jenkins教程菜鸟_Jenkins教程:在Windows平台安装Jenkins
- pycharm连接SqlServer数据库
- Jack Lin tools 3Dmax批渲染插件
- extends和implement的区别
- 清华大学杨殿阁 深度解读《汽车数据安全管理若干规定(征求意见稿)》
- WPS 从今以后我再也不会用了 记录一下!
- OpenHarmony在Amlogic A311D芯片平台的快速开发上手指南
- 【Pandas入门教程】如何重塑表格布局
- 从“上云”到“云管理”,中国首个多云管理平台评估标准有何妙处?
- Unity模糊远处物体,近处清晰,景深效果
- 2021-05-23:打开Office后界面上显示一个横幅提示:你的许可证不是正版,并且你可能是盗版软件的受害者
- 读《互联网创业密码》之感想
- MySQL查询当前时间的前几天的数据