@ZeroGeek
2016-09-21T05:16:04.000000Z
字数 885
阅读 1261
android
今天修复某Bug的时候突然发现第一次点击EditText时,并没有触发OnClick事件,触发了OnTouch事件。
点击EditText时,如果已经获取了焦点,则触发OnClick事件,否则获取焦点,不触发OnClick事件。
EditText的常用监听事件有OnTouchListener,OnClickListener,OnFocusChangeListener.
以下比较这3个事件,分析触发的顺序与场景:
1. 第一次开启某界面,该界面中的EditText自动获取焦点,触发OnFocusChangeListener,不触发其它事件。
2. 某界面有多个EditText时,第一个被绘制的自动获得焦点
3. 某EditText无焦点,点击该EditText,首先触发OnTouchListener(这里会触发几次,根据View的层级,以下同),再触发OnFocusChangeListener,不触发OnClickListener。
4. 某EdiText已有焦点,点击该EditText,首先触发OnTouchListener,不触发OnFocusChangeListener,最后触发OnClickListener。
5. 某EditText失去焦点,会触发OnFocusChangeListener。
部分示例:
mFirstEt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if (b) {
// 取得焦点
} else {
// 失去焦点
}
}
});