Android Edittext 手机号码格式输入设置
2017-12-28 15:51
549 查看
一. 效果图
根据需求要实现的是输入手机号码格式的数字文本,并且输入时能根据手机号码自动分隔成美观的带空格的格式,点击完成后能对手机号码验证是否是手机号码.
二. 代码实现
我使用的是动态添加代码的方式,完整代码如下.final EditText phonEeditText=new EditText(this); phonEeditText.setId(Util.generateViewId()); phonEeditText.setTextColor(Color.WHITE); phonEeditText.setTextSize(Axis.scaleTextSize(60)); UIHelper.setHint(phonEeditText,getResources().getString(R.string.input_phone_text),Axis.scaleX(20));//设置hint提示文字的大小,后面有此方法代码 phonEeditText.setHintTextColor(ContextCompat.getColor(this,R.color.white_99_color));//设置hint文字颜色 phonEeditText.setBackground(initStateListDrawable());//设置底部下划线得到焦点时高亮 phonEeditText.setBackgroundColor(Color.TRANSPARENT); phonEeditText.setSingleLine(); phonEeditText.setInputType(EditorInfo.TYPE_CLASS_PHONE);//设置输入格式:只能输入数字 phonEeditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(13)});//设置限制长度,多了输入不了 phonEeditText.setImeOptions(EditorInfo.IME_ACTION_DONE); //关键部分:自动分隔手机号码通过addTextChangedListener()实现 phonEeditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence charSequence, int start, int before, int count) { if (charSequence == null || charSequence.length() == 0) return; StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < charSequence.length(); i++) { if (i != 3 && i != 8 && charSequence.charAt(i) == ' ') { continue; } else { stringBuilder.append(charSequence.charAt(i)); if ((stringBuilder.length() == 4 || stringBuilder.length() == 9) && stringBuilder.charAt(stringBuilder.length() - 1) != ' ') { stringBuilder.insert(stringBuilder.length() - 1, ' '); } } } if (!stringBuilder.toString().equals(charSequence.toString())) { int index = start + 1; if (stringBuilder.charAt(start) == ' ') { if (before == 0) { index++; } else { index--; } } else { if (before == 1) { index--; } } editText.setText(stringBuilder.toString()); editText.setSelection(index); } } @Override public void afterTextChanged(Editable s) { } }); //设置光标颜色, R.drawable.cursor里自己定义颜色 try { Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); f.setAccessible(true); f.set(phonEeditText, R.drawable.cursor); } catch (Exception e) { e.printStackTrace(); }
UIHelper.setHint( ) 方法:
/** * 设置Editetxt Hint 文字大小 * @param editText * @param hint * @param fontSize */ public static void setHint(EditText editText, String hint, int fontSize) { SpannableString ss = new SpannableString(hint); AbsoluteSizeSpan ass = new AbsoluteSizeSpan(fontSize, true); ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); editText.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失 }
R.drawable.cursor:设置光标颜色
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#FFFFFF" />//颜色 <size android:width="1dp" />//光标宽度 </shape>
最后只要在父 View addView() 就能用了
RelativeLayout.LayoutParams phonEeditText_lp=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,height); parentView.addView(phonEeditText,phonEeditText_lp);
手机号码格式验证.
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final String phone = phonEeditText.getText().toString().trim().replace(" ", "");//去除分隔手机号中间的空格 if (phone.equals("")) {//为空 ... return; } else if (!AppUtil.isChinaPhoneLegal(phone)) {//不符合手机号码格式 ... return; } ...//服务器验证手机号码和密码是否正确、跳转 } });
验证手机格式是否正确 AppUtil.isChinaPhoneLegal( ) 方法:
/** * 是否大陆手机 * @param str * @return */ public static boolean isChinaPhoneLegal(String str) { String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$"; Pattern p = Pattern.compile(regExp); Matcher m = p.matcher(str); return m.matches(); }
相关文章推荐
- [置顶] EditText设置输入的类型,只能输入纯数字,只能输入手机号码,只能输入邮箱等等。
- android edittext 输入手机号码格式变化
- android 验证输入的是否为手机号码格式
- android ip地址,手机号码,邮箱格式验证
- Android设置EditText只接受数字输入以及定义字符
- EditText的换行输入、输入起始位置、调用指定格式的系统键盘(显示和隐藏),光标颜色,密码动态设置可见性
- Android EditText输入格式设置
- Android 手机号码格式验证
- Android EditText 实现特殊格式输入
- android 输入手机号码加空格 删除时空格一起删除
- Android设置EditText输入字数限制的两种方法!
- android手机设置中的语音输入与输出
- Android EditText 限制输入数字和字母设置
- Android 验证输入的手机和邮箱字符串格式是否正确
- Android EditText输入格式设置
- 判断邮箱,手机号码,身份证,用户名,昵称等输入格式是否正确的 正则表达式
- Android 在java代码中设置EditText只接受数字输入
- Android之手机号码格式的正则表达式
- Android 设置EditText为仅输入数字且最多只能有两位数字
- jq控制输入手机号码格式显示为3-4-4