1. 常用属性
EditText控件用于获取用户的输入。EditText类继承TextView类,能使用TextView的所有常用属性。可参考Android TextView控件。
- android:hint设置EditText内容为空时显示的文本
- android:textColorHint设置hint的字体颜色
- android:editable设置是否可编辑
- android:password设置是否是密码框,显示内容自动为星号
2. 输入限制
android:inputType属性,设置虚拟键盘
值 | 说明 |
---|---|
none | 输入普通字符 |
text | 输入普通字符 |
textCapCharacters | 输入普通字符 |
textCapWords | 单词首字母大小 |
textCapSentences | 仅第一个字母大小 |
textAutoCorrect | 前两个自动完成 |
textAutoComplete | 前两个自动完成 |
textMultiLine | 多行输入 |
textImeMultiLine | 输入法多行(不一定支持) |
textNoSuggestions | 不提示 |
textUri | URI格式 |
textEmailAddress | 电子邮件地址格式 |
textEmailSubject | 邮件主题格式 |
textShortMessage | 短消息格式 |
textLongMessage | 长消息格式 |
textPersonName | 人名格式 |
textPostalAddress | 邮政格式 |
textPassword | 密码格式 |
textVisiblePassword | 密码可见格式 |
textWebEditText | 作为网页表单的文本格式 |
textFilter | 文本筛选格式 |
textPhonetic | 拼音输入格式 |
number | 数字格式 |
numberSigned | 有符号数字格式 |
numberDecimal | 可以带小数点的浮点格式 |
phone | 拨号键盘 |
datetime | 时间日期 |
date | 日期键盘 |
time | 时间键盘 |
android:digits属性,指定要支持的字符
- android:digits=”0123456789abcdefghijklmnopqrstuvwxyz”
android:numeric属性,只支持数字
值 | 说明 |
---|---|
integer | 只能输入整数 |
decimal | 可以输入小数 |
signed | 有符号数字格式 |
3. 动态设置密码格式
setInputType()
方法。
if (show) {
EditText.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
} else {
EditText.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
setTransformationMethod()
方法。
if (show) {
EditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
EditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
4. 软键盘右下角按键
android:imeOptions设置软键盘右下键按键。
值 | 说明 |
---|---|
actionUnspecified | 对应常量EditorInfo.IME_ACTION_UNSPECIFIED |
actionNone | 对应常量EditorInfo.IME_ACTION_NONE |
actionGo | 对应常量EditorInfo.IME_ACTION_GO |
actionSearch | 对应常量EditorInfo.IME_ACTION_SEARCH |
actionSend | 对应常量EditorInfo.IME_ACTION_SEND |
actionNext | 对应常量EditorInfo.IME_ACTION_NEXT |
actionDone | 对应常量EditorInfo.IME_ACTION_DONE |
设置下面两个属性中的一个即可使这个属性生效
- 将singleLine设置为true
- 将inputType设置为text
监听软件盘按钮,返回true来屏蔽系统默认操作。
EditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_NEXT) {
Toast.makeText(EditTextActivity.this, "Next Click", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
});
5. 设置光标位置
EditText的setSelection()
方法实际上是调用Selection.setSelection()
的方法实现的。
setSelection(int index)
将光标移至index处。setSelection(int start, int stop)
选择从start到stop处的文本。
6. TextWatcher监听器
EditText调用addTextChangedListener(TextWatcher watcher)来添加监听器。
public interface TextWatcher extends NoCopySpan {
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);
}
在onTextChanged方法中有4个参数。
- s表示输入框中字符。
- start表示光标的位置。如果count大于0,start是光标开始的位置,结束时为start加上count。否则start是光标结束的位置。
- before表示原有字符被删除的数量。用delete删除时为1,而在添加字符时为0。
- count表示输入字符的长度。添加时为1,删除时为0。
当进行拷贝、剪切、粘贴时,before和count为实际字符的长度。
(1) 添加一个字符,start为输入光标处,count为1,before为0。拷贝一个字符串,count为字符串长度。
(2) 删除一个字符,start为结束光标处,count为0,before为1。剪切一个字符串,before为字符串长度。
(3) 拷贝一个长度为3的字符串,粘贴覆盖2个字符串,start为输入光标处,count为3,before为2。