[关闭]
@ZeroGeek 2016-09-21T05:16:04.000000Z 字数 885 阅读 1105

EditText焦点引发的分析

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。

部分示例:

  1. mFirstEt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
  2. @Override
  3. public void onFocusChange(View view, boolean b) {
  4. if (b) {
  5. // 取得焦点
  6. } else {
  7. // 失去焦点
  8. }
  9. }
  10. });

建议

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注