焦点改变监听:setOnFocusChangeListener
这个监听比较实用,尤其是在页面中有多个文本,并且要对部分文本进行有效验证的时候。
简单示例如下:
signWords.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){//获得焦点
//在这里可以对获得焦点进行处理
}else{//失去焦点
//在这里可以对输入的文本内容进行有效的验证
}
}
});
以上的这个监听有一个弊端,就是如果页面只有一个EditText,该EditText一旦获得焦点就不会再失去焦点。这是个比较让人头痛的问题。想在此时进行有效的验证恐怕是很难做到的。
文本内容改变监听:addTextChangedListener
这个监听是在EditText的文本内容发生改变的时候进行触发的。触发的频率比上面的监听要高得多。所以一般不建议使用。如果你有特殊的需求,使用起来也是挺方便的。
简单的示例如下:
signWords.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(start>0&&
CommonUtils.matchString(checkAllow, String.valueOf(true))&&
CommonUtils.matchString(signAttr, "sureAllowName")){//工作许可人
System.out.println("changed:"+s);
TaskParams params = new TaskParams();
params.put("searchNames", String.valueOf(s));
UserSearchTask task = new UserSearchTask();
task.setListener(tuserSearchTaskListener);
task.execute(params);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
以下是调用的任务及监听事件
/**
* 根据语音搜索用户任务
*
* @author lihua
*/
private class UserSearchTask extends GenericTask {
@Override
protected String _doInBackground(TaskParams... params) {
try {
return getApi().getSearchUserByNames(
params[0].getString("searchNames"));
} catch (HttpException e) {
e.printStackTrace();
return "error";
}
}
}
/**
* 搜索用户任务监听
*/
private TaskListener tuserSearchTaskListener = new TaskAdapter() {
@Override
public void onPostExecute(GenericTask task, String result) {
try {
JSONObject object = new JSONObject(result);
if("true".equals(object.getString("success"))){
sysUserId = object.getString("sysUserId");
signWords.setText(object.getString("fullName"));
}else{
//Toast.makeText(getApplicationContext(), "未找到相符的工作人员姓名", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public String getName() {
return "Login";
}
};
如果一个Activity或Dialog中就一个EditText,而不想在打开该Activity或Dialog时将焦点设置在EditText中。这里提一点,如果页面中有EditText,系统会默认将焦点移到第一个EditText上。可以采取如下方式:
在对应的XML文件中放置一个没有任何内容的LinearLayout
<LinearLayout
android:id="@+id/ll_focus"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="0px"/>
分享到:
相关推荐
这样,即使ListView在触摸事件中,也能保持EditText的焦点。 ```java public class EditTextListView extends ListView { // ... @Override public boolean onInterceptTouchEvent(MotionEvent ev) { int ...
在Android开发中,EditText是用户输入文本的基本组件,通常与虚拟键盘相配合使用。然而,在某些情况下,我们可能希望在用户点击应用中的其他非EditText视图时自动隐藏键盘,以优化用户体验或保持屏幕清洁。标题...
这个压缩包文件“安卓Android源码——(EditText文本编辑).zip”很可能包含了一个关于如何自定义和优化`EditText`的示例项目,或者是一些深入解析`EditText`工作原理的代码和文档。下面我们将详细探讨`EditText`在...
通过分析这份"EditText文本编辑"的源码,开发者不仅可以加深对EditText工作原理的理解,还能学习到如何在实际项目中优化和扩展这个组件,以提高用户体验。对于Android应用开发者来说,深入源码是提升技能、解决实际...
这个"Android EditText文本编辑Demo源码.rar"文件包含了一个示例项目,帮助开发者深入理解和实践EditText的使用。下面将详细介绍EditText的主要功能、常见属性以及如何在实际应用中进行操作。 1. **EditText基本...
在Android开发中,`EditText`是用户界面中用于接收用户输入文本的重要组件。有时,我们希望用户在完成一个`EditText`的输入后,能够自动跳转到下一个`EditText`进行继续输入,这样的交互设计可以提高用户体验,使得...
这份名为"应用源码之(EditText文本编辑).zip"的压缩包显然包含了一些关于如何理解和自定义EditText的源码示例。接下来,我们将深入探讨EditText的相关知识点。 1. **EditText基本使用**: EditText继承自TextView...
本资源“安卓EditText输入框相关-edittext失去焦点收起键盘.rar”可能包含了一系列与EditText交互,特别是如何在EditText失去焦点时自动收起软键盘的实践案例。由于无法直接查看压缩包内容,以下将根据常见需求和...
通过学习和实践这份"Android应用源码之(EditText文本编辑)",开发者不仅可以掌握EditText的基本用法,还能进一步了解Android UI设计、数据验证、用户交互等方面的知识,为后续的移动应用开发打下坚实基础。
- `setOnFocusChangeListener`:监听焦点变化,当`EditText`获得或失去焦点时执行相应代码。 4. **获取用户输入**: 通过`getText().toString()`方法可以获取`EditText`中的文本内容,例如: ```java String ...
6. **监听输入事件**:为了实现上述逻辑,我们需要监听EditText的焦点变化和文本改变事件,可以使用`OnFocusChangeListener`和`TextWatcher`。 7. **优化性能**:考虑到GIF播放可能会消耗较多CPU资源,特别是在旧...
1. **禁用ScrollView的滚动**:当EditText获取焦点时,可以通过监听FocusChange事件,暂时禁用ScrollView的滚动,让EditText能够正常显示输入法。 ```java editText.setOnFocusChangeListener(new View....
这主要是因为EditText的焦点获取、文本输入监听和布局重绘等操作在滚动时会继续执行。为优化此问题,可以采取以下策略: - 使用`android:descendantFocusability="blocksDescendants"`属性阻止子View(如EditText...
总之,处理Android ListView中的EditText焦点和数据错位问题需要对Android的视图复用机制有深入理解,并能够巧妙地运用事件监听、数据模型同步等技术。在实际项目中,开发者应该根据具体需求和场景选择最适合的解决...
焦点管理在Android中至关重要,因为只有一个View可以拥有焦点,而这个焦点决定了哪个View可以接收用户的输入事件。当用户点击或触摸屏幕时,系统会将焦点转移到被点击的View。对于`EditText`,我们可以使用以下方法...
可以使用`android:textInputType="textMultiLine"`属性,让`EditText`允许输入多行文本,并支持特殊字符。此外,可能还需要设置字体,确保字体库中包含所有表情对应的Unicode字符。 在处理表情输入时,需要注意一些...
2. 防止事件穿透:设置EditText的android:descendantFocusability属性为`BEHIND`,使其不会抢夺父View的焦点,允许ListView正常滚动。 3. 使用TextWatcher监听文本变化,确保数据实时更新并存储。 对于CheckBox和...
在Android软件开发中,EditText是用户输入文本的基本控件,它是TextView的一个子类,提供了文本输入、编辑和格式化功能。本教程将深入探讨EditText的源码,帮助开发者更好地理解和利用这一关键组件。 首先,...
- `setOnFocusChangeListener`:当`EditText`获取或失去焦点时触发的监听器。 - `setOnClickListener` 和 `setOnLongClickListener`:点击和长按事件处理。 4. 高级功能: - 密码框:通过`android:inputType=...