关于EditText的设置
-
自定义输入内容
布局文件中设置digits属性,值就是你的自定义内容
<EditText android:layout_width="match_parent" android:layout_height="match_parent" android:digits="0123456789Xx"/>
代码中自定义输入内容:
etInput.setKeyListener(new NumberKeyListener() { @Override protected char[] getAcceptedChars() { return new char[]{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'X', 'x' }; } @Override public int getInputType() { return InputType.TYPE_CLASS_TEXT; } });
上述输入规则:只有符合身份证号码的内容可以输入进去
也可以通过设置过滤器,自定义过滤规则,达到自定义输入内容的目的。
etInput.setFilters(new InputFilter[]{ new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { return null; } } });
限制输入的整数与小数位数:
-
设置最大输入长度
布局文件中设置maxLength属性
<EditText android:maxLength="18" android:layout_width="match_parent" android:layout_height="wrap_content" />
也可在代码中设置过滤器
etInput.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(mMaxLength) });
-
设置行数限制以及单行限制
经测试发现目前设置单行限制只有设置setSingleLine()比较有效,包括在布局文件
<EditText android:singleLine="true" android:layout_width="match_parent" android:layout_height="match_parent" />
根据其提示设置
android:maxLines="1"
并不能达到singleline="true"的效果
-
设置密码的明文与密文切换
/** * 明文显示密码 */ public void setVisiblePwd() { imageView.setImageResource(R.drawable.icon_wealth_money_hide); etInput.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); if (!inputViews.isEmpty()) { for (InputView inputView : inputViews) { inputView.getEtInput().setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } } // 此种也可实现明文切换 // etInput.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD|InputType.TYPE_CLASS_TEXT); }
/** * 不明文显示密码 */ public void setInvisiblePwd() { imageView.setImageResource(R.drawable.icon_wealth_money_show); etInput.setTransformationMethod(PasswordTransformationMethod.getInstance()); if (!inputViews.isEmpty()) { for (InputView inputView : inputViews) { inputView.getEtInput().setTransformationMethod(PasswordTransformationMethod.getInstance()); } } // 密文密码 // etInput.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT); }
-
自定义键盘时,光标不显示的处理
场景: 对于EditText使用自定义键盘并且进入页面默认不弹出键盘时,用户手动触发弹出自定义键盘,此时EditText会一直没有光标闪烁提示,显得很是怪异。
解决方案:
@Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { //save EditText的输入类型 int inputType = ((EditText) v).getInputType(); ...... (自定义键盘以及系统的操作处理) //执行完成相关操作后,恢复原EditText的输入类型,以保证当使用自定义键盘并且默认不弹出时,可以显示光标cursor ((EditText) v).setInputType(inputType); } return false; }
-
自定义光标cursor的颜色样式
<EditText ... android:textCursorDrawable="@drawable/cursor_main_color" />
通过设置textCursorDrawable可以自定义光标样式,经自测,只有设置Drawable资源才有效,设置color资源无效。
R.drawable.cursor_main_color 的代码
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="2dp" /> <solid android:color="@color/main_color" /> </shape>