一、基础属性与初始化
-
XML 声明
在布局文件中定义 EditText,设置基础属性:
<EditText android:id="@+id/et_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" android:inputType="text" android:maxLength="20" />-
android:hint:输入框为空时的提示文本。 -
android:inputType:控制输入类型(如文本、密码、数字等)。 -
android:maxLength:限制最大输入长度。
-
-
代码初始化
在 Activity/Fragment 中获取实例并操作:
EditText etUsername = findViewById(R.id.et_username); etUsername.setText("默认文本"); // 设置默认文本 String input = etUsername.getText().toString(); // 获取输入内容
二、输入类型与验证
-
常用
inputType值类型
用途
示例
text普通文本
android:inputType="text"textPassword密码(隐藏字符)
android:inputType="textPassword"number整数输入
android:inputType="number"phone电话号码
android:inputType="phone"textEmailAddress邮箱地址
android:inputType="textEmailAddress"textCapSentences首字母自动大写
组合使用:`text
-
动态设置输入类型
etPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); -
输入验证
使用
TextWatcher实时校验格式:etUsername.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { if (s.length() < 6) { etUsername.setError("用户名至少6位"); // 错误提示 } } // 其他方法留空 @Override public void beforeTextChanged(...) {} @Override public void onTextChanged(...) {} });
三、样式与交互定制
-
外观定制
-
字体/颜色:
android:textColor="#FF0000" android:textSize="16sp" android:typeface="monospace" -
背景与边框:
使用
android:background设置背景色或自定义 Drawable 资源。
-
-
密码可见性切换
通过按钮动态切换明文/密文:
button.setOnClickListener(v -> { if (isPasswordVisible) { etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance()); } else { etPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } isPasswordVisible = !isPasswordVisible; }); -
添加清除按钮
监听文本变化,动态显示清除图标:
etSearch.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { if (s.length() > 0) { etSearch.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_clear, 0); } else { etSearch.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); } } // ... });
四、高级功能
-
输入过滤器(InputFilter)
自定义输入规则(如仅允许数字):
InputFilter filter = (source, start, end, dest, dstart, dend) -> { for (int i = start; i < end; i++) { if (!Character.isDigit(source.charAt(i))) { return ""; // 非数字字符被过滤 } } return null; }; etNumber.setFilters(new InputFilter[]{filter}); -
键盘优化
-
回车键动作:
android:imeOptions="actionSearch"监听搜索键:
etSearch.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_SEARCH) { performSearch(); return true; } return false; });
-
五、注意事项
-
性能优化
-
避免在
TextWatcher中执行耗时操作(如网络请求),否则会导致 UI 卡顿。 -
对长文本输入使用
android:maxLines或android:scrollHorizontally防止内存溢出。
-
-
安全性
-
密码字段始终使用
inputType="textPassword",避免明文存储。 -
敏感信息输入禁用第三方键盘(
android:importantForAutofill="no")。
-
-
国际化适配
-
为 RTL 语言(如阿拉伯语)设置
android:textDirection="rtl"。 -
使用
android:digits限制特定字符集。
-
总结
EditText 的核心使用流程:
-
声明 → XML 布局中配置基础属性和输入类型。
-
初始化 → 代码中获取实例,设置监听器。
-
校验 → 通过
TextWatcher实现实时验证。 -
定制 → 样式调整(字体、背景)、交互增强(密码切换、清除按钮)。
最佳实践:
优先使用
TextInputLayout(Material Design 组件)替代原生 EditText,提供浮动标签和错误提示。复杂输入逻辑(如银行卡号格式化)可结合
InputFilter和正则表达式实现。
通过合理配置属性和事件监听,可构建高效、安全的文本输入体验。
311

被折叠的 条评论
为什么被折叠?



