好的,这里为您总结一下 Android EditText 的常用属性和方法。EditText 是 TextView 的子类,因此它继承了 TextView 的所有特性,并增加了文本编辑的功能。
一、常用 XML 属性
这些属性主要在布局文件中设置。
1. 输入类型
这是最重要的属性之一,它决定了键盘类型和输入行为。
android:inputType="..."
常用值:
-
text: 普通文本。 -
textCapWords/textCapSentences: 单词/句子首字母大写。 -
textPassword/numberPassword: 密码类型,显示为圆点。 -
number/numberSigned: 数字(有符号数字)。 -
phone: 电话号码键盘。 -
emailAddress: 电子邮件地址键盘(带 @ 符号)。 -
textMultiLine: 支持多行输入。 -
textEmailSubject: 邮件主题。 -
textUri: 网址输入。 -
date/time: 日期/时间(行为可能因设备而异)。 -
可以组合使用:
textCapSentences|textMultiLine
2. 提示文本
android:hint="请输入用户名"
当 EditText 为空时显示的灰色提示文字。
3. 文本
android:text="预设文本"
设置 EditText 的初始文本。
4. 行数与滚动
android:lines="5" // 固定高度为5行
android:maxLines="10" // 最大高度为10行,超过则滚动
android:minLines="2" // 最小高度为2行
android:scrollbars="vertical" // 当文本超出时显示垂直滚动条
5. 输入限制
android:maxLength="10" // 最大输入长度为10个字符
6. 其他实用属性
// 光标和文本选择
android:cursorVisible="true|false" // 控制光标是否可见
android:textIsSelectable="true" // 文本是否可选(但不能编辑,适用于TextView)
// 外观
android:background="@null" // 移除默认下划线背景(常用于Material Design)
android:drawableStart="@drawable/ic_user" // 在起始位置设置图标
android:drawablePadding="8dp" // 图标与文本的间距
// 单行与省略号
android:singleLine="true" // 已废弃,推荐使用 maxLines 和 minLines
android:ellipsize="end" // 文本过长时在末尾显示省略号...
// 字体
android:textSize="16sp"
android:textColor="@color/black"
android:textColorHint="@color/grey" // 提示文字的颜色
二、常用方法
这些方法主要在 Java/Kotlin 代码中使用。
1. 获取和设置文本
// Kotlin
val inputText = editText.text.toString() // 获取文本(推荐)
editText.setText("新文本") // 设置文本
editText.text = Editable.Factory.getInstance().newEditable("新文本") // 另一种设置方式
// Java
String inputText = editText.getText().toString();
editText.setText("新文本");
注意:直接使用 getText() 返回的是 Editable 对象,通常需要转换为 String。
2. 文本变化监听
这是一个非常核心的功能。
editText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
// 文本即将改变时调用
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
// 文本正在改变时调用,最常用
// s 是当前输入框中的内容
if (s.toString().length > 5) {
// 执行某些操作,如实时搜索、验证格式等
}
}
override fun afterTextChanged(s: Editable?) {
// 文本改变完成后调用
// 可以在这里对 s 进行修改,例如自动添加格式符号
}
})
3. 焦点控制
editText.requestFocus() // 请求焦点,弹出键盘
editText.clearFocus() // 清除焦点,隐藏键盘
// 设置焦点变化监听
editText.setOnFocusChangeListener { view, hasFocus ->
if (hasFocus) {
// 获得焦点
} else {
// 失去焦点
}
}
4. 输入法操作
// 显示软键盘
fun showKeyboard(context: Context, view: View) {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}
// 隐藏软键盘
fun hideKeyboard(context: Context, view: View) {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
// 调用示例
showKeyboard(this, editText)
hideKeyboard(this, editText)
5. 选择文本与光标控制
editText.selectAll() // 选中所有文本
editText.setSelection(editText.text.length) // 将光标移动到文本末尾
editText.setSelection(start, end) // 选择从 start 到 end 的文本
6. 错误提示
在 Material Components 中,你可以使用 TextInputLayout 来包裹 EditText 以实现更好的错误提示效果。
// 假设 textInputLayout 是包裹着 editText 的 TextInputLayout
textInputLayout.error = "密码不能为空"
textInputLayout.isErrorEnabled = false // 清除错误提示
三、实用技巧与最佳实践
-
使用 TextInputLayout:来自 Material Design 库,它提供了浮动标签、错误提示、字符计数等强大功能,是现代 Android 开发的首选。
<com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:errorEnabled="true"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户名" /> </com.google.android.material.textfield.TextInputLayout> -
输入过滤:使用
InputFilter来限制输入内容,例如只允许输入字母和数字。val filters = arrayOf<InputFilter>(InputFilter { source, start, end, dest, dstart, dend -> // 只允许字母和数字 if (source.toString().matches(Regex("[a-zA-Z0-9]*"))) { source } else { "" } }) editText.filters = filters -
处理回车键动作:
editText.setOnEditorActionListener { v, actionId, event -> if (actionId == EditorInfo.IME_ACTION_DONE) { // 当用户按下键盘上的“完成”按钮时 hideKeyboard(this, editText) true // 表示已处理 } else { false } } 性能考虑:在
TextWatcher的onTextChanged中不要执行耗时操作,如果需要(如网络请求),请添加防抖处理。
这份总结涵盖了 EditText 在日常开发中的绝大多数使用场景。熟练掌握这些属性和方法,将能高效地处理各种用户输入需求。