EditTextView相关控制
EditTextView相关的控制
最近做一些简单工作比较多,关于edittextview使用比较多,来总结一下
1.获得焦点,取消焦点
如何自动获取焦点,如何取消自动获取焦点。
之前写过一些东西,参考链接:https://www.cnblogs.com/wisdomzhang/p/12303577.html
2.获取焦点监听
et_pwd.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override
public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) {
} else {
//to do something
}
}
});
3.文本输入监听
//文本改变 里面的有什么
et_pwd.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//文本改变之前 s从start开始,会有count个字符被替换,最后成为after
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//文本改变中 s从start开始,有before个字符已经被替换为count个字符
if (mpwd == null || s.length() != mpwd.length()) {
mpwd = s.toString();
}
}
@Override
public void afterTextChanged(Editable s) {
//文本改变后
}
});
4.文本输入过滤 InputFilter
InputFilter[] filters = { new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
//to do something
}
}, ...};
et_value.setFilters(filters); //可以添加多种过滤
输入中有一个,不常见的问题就是输入联想。输入法自动给你添加一些文字,这个时候,会给他添加一个过滤。
5.文本类型的控制
a.文本输入的类型有两种方案:
-
代码控制如下:
et_value.setInputType(InputType.TYPE_CLASS_TEXT | ...);
-
xml控制:
android:inputType="textWebPassword"
b.密码是否可见
//显示密码
et_pwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
//隐藏密码
et_pwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
c.输入来的类型控制
-
只输入数字,只输入英文字符,输入数字和字母,只输入汉字等等。
有一些解决办法:
-
使用xml的属性,digits="123456789" digits="12345xml"等等,来控制输入的字符。
-
使用textwatcher,来控制输入,过滤掉输入的类容
-
//控制只能输入指定的特殊字符 editText.setKeyListener(new NumberKeyListener(){ @Override protected char[] getAcceptedChars() { return new char[] { '1', '2', '3', '4', '5', '6', '7', '8','9', '0' }; } @Override public int getInputType() { // TODO Auto-generated method stub return android.text.InputType.TYPE_CLASS_PHONE; } });
-
只能输入中文
@Override public void afterTextChanged(Editable s) { //中文过滤 String inputStr = clearLimitStr(regex, str); et_value.removeTextChangedListener(this); // et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容 s.replace(0, s.length(), inputStr.trim()); et_value.addTextChangedListener(this); } private String clearLimitStr(String regex, String str) { return str.replaceAll(regex, ""); } private String regex = "[^\u4E00-\u9FA5]";
-
-
输入的长度控制,
length
就可以了如果是长度超过控件宽度,可以滑动显示文本,可以设置如下:
et_value.setSingleLine(true); et_value.setHorizontallyScrolling(true); //中文的长度限制 new InputFilter() { //中文长度限制,50 @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { int keep = itemValue.getLength() - (dest.length() - (dend - dstart)); if (keep <= 0) { Toast.makeText(m, "最多只能输入" + mMax + "个汉字", Toast.LENGTH_SHORT).show(); return ""; } else if (keep >= end - start) { return null; } else { keep += start; if (Character.isHighSurrogate(source.charAt(keep - 1))) { --keep; if (keep == start) { return ""; } } return source.subSequence(start, keep); } } }
6.弹出键盘
//弹出键盘
InputMethodManager imm = (InputMethodManager) LoginActivity.this .getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(et_pwd, InputMethodManager.RESULT_SHOWN);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
7.样式的修改
-
焦点光标的颜色
//属性 android:textCursorDrawable="@drawable/shape_login_color_cursor" //样式 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="1dp" /> <solid android:color="@color/color_login_bg_normal" /> </shape>
-
下划线的颜色
-
不要下划线 background = "@null" 或者设置为 background = "#ffffff"
-
android:theme
方式修改<style name="EditTextStyle"> <!--表示控件默认的颜色--> <item name="android:colorControlNormal">#ccc</item> <!--表示控件被激活时的颜色--> <item name="android:colorControlActivated">#ccc</item> </style>
-